我想保存两张图片原始一张,并调整一张图片的尺寸(用于缩略图)
我只使用一个字段来显示图像
但是我认为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);
});
//...
答案 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