Я использую MulterS3 для загрузки файлов в Amazon S3 и использую Sharp для изменения размера изображений заранее.Приведенный ниже код работает большую часть времени, но не всегда.
Под этим я подразумеваю то, что иногда изображение изменяется до указанного размера с водяным знаком, нанесенным поверх него, прежде чем оно будет загружено на S3, ноиногда этого не происходит.Иногда изображение просто загружается на S3 без изменения размера или применения водяного знака.
Я подозреваю, что причина этого заключается не в том, что Sharp завершает манипулирование изображениями перед фактической загрузкой на S3.
Имейте в виду, что мои предположения могут быть полностью неверными и проблема может бытьскрыт где-то еще в коде.
Код, который вы видите, используется непосредственно из проекта multer-s3-transform.Ссылка: https://www.npmjs.com/package/multer-s3-transform
Проблема, которую я описал, связана со второй функцией "transform", включающей sharp (). Resize (300, null).
Любая помощь приветствуется!
Я пытался использовать async await, но это не помогло, так как оно не действует внутри обратного вызова.
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()
);
}
}
]
})
});