我正在使用MulterS3将文件上传到Amazon S3,并利用Sharp预先调整图像大小。 下面的代码在大多数时间有效,但并非总是如此。
我的意思是,有时在将图像上载水印之前将其调整为指定的大小,然后再将其上载到S3,但这有时不会发生。 有时,图像只是上载到S3而没有调整大小或应用水印。
我怀疑这背后的原因不是在实际上传到S3之前等待Sharp完成对图像的处理。
请记住,我的猜测可能是完全错误的,并且该问题可能隐藏在代码的其他位置。
您看到的代码直接在multer-s3-transform项目中使用。 链接:https://www.npmjs.com/package/multer-s3-transform
我描述的问题与第二个“转换”函数有关,该函数包括sharp()。resize(300,null)。
感谢您的帮助!
我尝试使用异步等待,但这无济于事,因为它在回调内部无效。
const mediaUpload = multer({
storage: multerS3({
s3: s3,
bucket: 'test-bucket',
limits: { fileSize: 5 * 1024 * 1024 },
acl: 'public-read',
shouldTransform: function(req, file, cb) {
cb(null, true);
},
transforms: [
{
id: 'original',
key: function(req, file, cb) {
const fileName =
req.user._id +
Date.now().toString() +
path.extname(file.originalname);
const folderName = 'originals/';
const filePath = folderName + fileName;
cb(null, filePath);
},
transform: function(req, file, cb) {
cb(null, sharp());
}
},
{
id: 'cover',
key: function(req, file, cb) {
const fileName =
req.user._id +
Date.now().toString() +
path.extname(file.originalname);
const folderName = 'thumbnails/';
const filePath = folderName + fileName;
cb(null, filePath);
},
transform: function(req, file, cb) {
cb(
null,
sharp()
.resize(300, null)
.composite([{ input: watermark }])
.sharpen()
);
}
}
]
})
});