Сохранить оригинальный файл с помощью multer-s3-transform - PullRequest
0 голосов
/ 18 марта 2020

Если я загружаю изображение, я хочу, чтобы multer s3 сохранил оригинал, в дополнение к созданию эскиза.

Другими словами. Я только хочу изменить имя файла в первом преобразовании.

Приведенный ниже код работает i sh, но проблема в том, что sharp () изменяет оригинал. Допустим, я загружаю файл gif, анимация перестает работать.

Я пытался удалить функцию стрелки преобразования из исходного объекта преобразования, но это приводит к сбою кода с ошибкой dest.on is не функция .

Я пытался удалить весь объект преобразования, но так как shouldTransform является правдивым, он вообще не будет загружать оригинал.

Я пытался заменить sharp() с null, но это дает мне эту ошибку Невозможно прочитать свойство 'on' со значением NULL .

В соответствии с документами, я должен иметь возможность просто ввести строку в sharp () положение, но это также приводит к сбою кода. Пример: cb(null, "something.jpeg"); Ошибка: dest.on не является функцией

В документации по multer-s3-transform немного не хватает, так что на данный момент я просто брутфорс.

const awsStorage = multerS3({
    s3,
    bucket: process.env.AWS_BUCKET_NAME,
    shouldTransform: (transformReq, file, cb) => {
        cb(null, /^image/i.test(file.mimetype));
    },
    key: (transformReq, file, cb) => {
        const splitFileName = file.originalname.split('.');
        const fileEnding = splitFileName[splitFileName.length - 1];
        cb(null, `files/${dateNow}.${fileEnding}`);
    },
    transforms: [
        {
            id: 'original',
            key: (transformReq, file, cb) => {
                const splitFileName = file.originalname.split('.');
                const fileEnding = splitFileName[splitFileName.length - 1];
                cb(null, `files/${dateNow}.${fileEnding}`);
            },
            transform: (transformReq, file, cb) => {
                cb(null, sharp()); // This is where I'm struggling
            },
        },
        {
            id: 'thumbnail',
            key: (transformReq, file, cb) => {
                const splitFileName = file.originalname.split('.');
                const fileEnding = splitFileName[splitFileName.length - 1];
                cb(null, `thumbnails/${dateNow}.${fileEnding}`);
            },
            transform: (transformReq, file, cb) => {
                cb(
                    null,
                    sharp()
                        .resize(200, 200)
                        .png()
                );
            },
        },
    ],
});
...