'Is there any option to reduce the image size and resize the image in nodejs with multer functionality?
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 compress the image size to lowest and upload into the directory.Any help?
Solution 1:[1]
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.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Kayvan Mazaheri |