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
2 Answers
Reset to default 5You 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.