有没有一种方法可以只使用一个字段一次保存两个图像?

时间:2018-09-29 17:04:29

标签: mongodb amazon-s3 multer

我想保存两张图片原始一张,并调整一张图片的尺寸(用于缩略图)

我只使用一个字段来显示图像

但是我认为multer已经在S3上保存了原始版本,因此我无法在S3上保存调整大小的版本。

有没有一种方法可以仅使用一个字段一次保存两个图像?

const single = upload.single('img')

 single(req, res, function (err) {
            if (err) {
                return res.status(400).json({
                    message: errorMessage.UNEXPECTED_FIELD_ERROR + ' (img)'
                })
            }

            let img = req.file //img is already stored on S3 
                            //Now I can't store my thumbnail on S3!

gm(request(img.location))
          .thumbnail('50', '50', '!')
          .stream(function (err, stdout, stderr) {
            if(err) console.log(err)

            var writeStream = fs.createWriteStream('/tmp/resized.jpg');
            stdout.pipe(writeStream);
          });
          //...

1 个答案:

答案 0 :(得分:1)

https://www.npmjs.com/package/multer-s3-transform#transforming-files-before-upload

var upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: 'some-bucket',
    shouldTransform: function (req, file, cb) {
      cb(null, /^image/i.test(file.mimetype))
    },
    transforms: [{
      id: 'original',
      key: function (req, file, cb) {
        cb(null, 'image-original.jpg')
      },
      transform: function (req, file, cb) {
        cb(null, sharp().jpg())
      }
    }, {
      id: 'thumbnail',
      key: function (req, file, cb) {
        cb(null, 'image-thumbnail.jpg')
      },
      transform: function (req, file, cb) {
        cb(null, sharp().resize(100, 100).jpg())
      }
    }]
  })
})

我使用了multer-s3-transform提供的转换,但是最新版本不提供transforms选项,所以我使用了此代码副本并粘贴到了multer-s3-transform lib

https://github.com/badunk/multer-s3/pull/56/files