multers3 пропуск должен преобразовать - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь обрезать изображения перед отправкой в ​​корзину s3. Моя проблема в моих параметрах multerS3, если Transform будет пропущен, следовательно, не принимает преобразования.

Вот весь мой файл загрузки

require('multer-s3-transform');
const aws = require('aws-sdk');
const multer = require('multer');
const multerS3 = require('multer-s3');
const sharp = require('sharp');

aws.config.update({
    secretAccessKey: secretAccessKey,
    accessKeyId: accessKeyId,
    region: region,
});

const s3 = new aws.S3();

const fileFilter = (req, file, cb) => {
    if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png' || file.mimetype === 'image/jpg') {
        cb(null, true);
    } else {
        cb(new Error(message.FAIL.invalidImage), false);
    }
};

const upload = multer({
    fileFilter,
    storage: multerS3({
        s3,
        bucket: bucket,
        acl: 'public-read',
        shouldTransform: function (req, file, cb) {
            console.log('in should transform ');
            cb(null, true);
        },
        transforms: [
            {
                id: 'original',
                key: function (req, file, cb) {
                    cb(null, Date.now().toString());
                },
                transform: function (req, file, cb) {
                    console.log('og');
                    cb(null, sharp().jpg())
                },
            },
            {
                id: 'resized',
                key: function (req, file, cb) {
                    cb(null, Date.now().toString());
                },
                transform: function (req, file, cb) {
                    console.log('thumbnail');
                    cb(null, sharp().resize(300, 300).jpg())
                },
            }
        ],
        metadata: function (req, file, cb) {
            cb(null, {fieldName: 'some meta'});
        },
        key: function (req, file, cb) {
            cb(null, Date.now().toString());
        },
    })
});

module.exports = upload;

Вот мой маршрут

const photoUpload = upload.fields([{name: 'photo', maxCount: 1}]);
    // Route for uploading photo image
        app.post(routeRoot + '/upload/photo', function (req, res) {
            console.log('in route ');
            photoUpload(req, res, function (err) {
                if (err) {
                    return res.status(200).send({error: {message: err.message}});
                } else {
                    account.uploadPhoto(req, res);
                }
            })
        });

Результат, который я получаю

files [Object: null prototype] {
  photo: [
    {
      fieldname: 'photo',
      originalname: '4.jpg',
      encoding: '7bit',
      mimetype: 'image/jpeg',
      size: 84154,
      bucket: '...',
      key: '...',
      acl: 'public-read',
      contentType: 'image/jpeg',
      contentDisposition: null,
      storageClass: 'STANDARD',
      serverSideEncryption: null,
      metadata: [Object],
      location: '...',
      etag: '...',
      versionId: undefined
    }
  ]
}

Загрузка файла на S3 работает, но он не преобразуется. Я пытался понять это. Спасибо!

1 Ответ

0 голосов
/ 28 января 2020

Я понял это.

const multerS3 = require('multer-s3-transform');

вместо

const multerS3 = require('multer-s3');

по какой-то причине в документах есть 'multer-s3' , но не требуется 'multer-s3-transform' , то есть то, что нужно для того, чтобы ДолженТрансформатор работать

...