В ожидании резкого изменения размера изображения перед загрузкой на S3 - PullRequest
0 голосов
/ 23 сентября 2019

Я использую 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()
          );
        }
      }
    ]
  })
});
...