是否有任何选项可以缩小图像大小并在具有multer功能的nodejs中调整图像大小?

时间:2017-07-21 12:36:28

标签: javascript node.js multer

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 })

我需要调整图像大小并将图像大小压缩到最低位置并上传到目录中。有什么帮助?

2 个答案:

答案 0 :(得分:1)

您可以为multer创建自定义存储引擎。

根据official documentation,自定义存储引擎是公开两个功能的类:_handleFile_removeFile

以下是创建自定义存储引擎(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)
}

在将_handleFile功能保存到磁盘之前,可以减小图像大小。

为了减小图像尺寸,您可以选择形成各种npm模块来完成这项工作。一些值得检查的模块是SharpLight-weight image processorGraphicsMagick for node

答案 1 :(得分:0)

这可以使用multer-imager npm modeule来完成。

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

确保在此之前安装graphicsmagick(不是npm模块)。 按照以下链接安装graphicsmagick。

http://linuxg.net/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/

然后安装multer-imager和gm npm模块。