admin管理员组

文章数量:1323029

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now())
  }
})

var upload = multer({ storage: storage })

I need to resize the image and press the image size to lowest and upload into the directory.Any help?

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now())
  }
})

var upload = multer({ storage: storage })

I need to resize the image and press the image size to lowest and upload into the directory.Any help?

Share Improve this question asked Jul 21, 2017 at 12:36 JagadeeshJagadeesh 2,0979 gold badges28 silver badges51 bronze badges 1
  • 1 Try Using the module "multer-imager" npm to reduce the image size before uploading it to directory. – sugandhi Commented Jul 21, 2017 at 12:59
Add a ment  | 

2 Answers 2

Reset to default 5

You can create a customized Storage Engine for multer.

According to the official documentation, custom Storage Engines are classes that expose two functions: _handleFile and _removeFile.

Here is the official template for creating a custom Storage Engine (Link):

var fs = require('fs')

function getDestination (req, file, cb) {
  cb(null, '/dev/null')
}

function MyCustomStorage (opts) {
  this.getDestination = (opts.destination || getDestination)
}

MyCustomStorage.prototype._handleFile = function _handleFile (req, file, cb) {
  this.getDestination(req, file, function (err, path) {
    if (err) return cb(err)

    var outStream = fs.createWriteStream(path)

    file.stream.pipe(outStream)
    outStream.on('error', cb)
    outStream.on('finish', function () {
      cb(null, {
        path: path,
        size: outStream.bytesWritten
      })
    })
  })
}

MyCustomStorage.prototype._removeFile = function _removeFile (req, file, cb) {
  fs.unlink(file.path, cb)
}

module.exports = function (opts) {
  return new MyCustomStorage(opts)
}

You can reduce the image size on the _handleFile function before saving it to the disk.

For reducing the image size you can choose form a variety of npm modules which do this job. Some modules worth checking are Sharp, Light-weight image processor and GraphicsMagick for node.

This can be done using multer-imager npm module.

http://www.npmjs./package/multer-imager

make sure you install graphicsmagick before that(not npm module). Click on the link below to install graphicsmagick.

http://linuxg/how-to-install-graphicsmagick-1-3-18-on-ubuntu-13-10-13-04-12-10-12-04-linux-mint-16-15-14-13-pear-os-8-7-and-elementary-os-0-2/

Then install multer-imager and gm npm module.

本文标签: