Если я загружаю изображение, я хочу, чтобы 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()
);
},
},
],
});