Преобразуйте фотографию с помощью imagemin перед загрузкой на s3, используя multer-s3-transform

Я пытался использовать multer-s3-transform при загрузке фотографии на s3, но перед этим мне нужно преобразовать изображение в гораздо меньший размер файла с помощью imagemin. Я смог сделать это с помощью Sharp, но все еще хочу попробовать это с помощью imagemin, чтобы специально установить качество.

Это то, что я сделал, используя Sharp. Мне нужно найти способ сделать это с помощью imagemin

const multerS3Obj = multerS3({
    s3 : s3,
    bucket : config.amazon.s3.bucketName,
    acl : "public-read",
    contentType : multerS3.AUTO_CONTENT_TYPE,
    metadata : function(req, file, cb) {
        const metadataObj = Object.assign({}, req.body);

        metadataObj.content_type = file.mimetype;
        metadataObj.filename = file.originalname;

        cb(null, metadataObj);
    },
    shouldTransform: function(req, file, cb) {
        cb(null, /^image/i.test(file.mimetype));
    },
    transforms: [
        {
          key: function(req, file, cb) {
            const refType = req.params.refType,
                refId = req.params.refId,
                subfolder = `uploads/${refType}/${refId}/`;
                cb(null, subfolder + file.originalname);
          },
          transform: function(req, file, cb) {
            cb(null, sharp().resize(null,null));
          }
        }
    ]
});

Это то, что я сделал с помощью imagemin, но это не сработало

const buff = async (image, path) => {
    const files = await imagemin([image], path, {
        plugins : [
            imageminJpegtran(),
            imageminPngquant({quality: '65-80'})
        ]
    })
}

это часть преобразования в первом коде

transform: async function(req, file, cb) {
    const files = await buff(file.originalname, 'location')
    cb(null, sharp().resize(null,null));
}

Я продолжаю получать сообщение об ошибке: uncaughtException: dest.on не является функцией

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
466
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я смог решить это. вместо того, чтобы использовать imagemin для установки качества изображения, обнаружил, что Sharp поддерживает настройку качества изображения.

let quality = ''
if (file.mimetype === 'image/jpeg') {
    quality = sharp().jpeg({quality: 50})
} else if (file.mimetype === 'image/png') {
    quality = sharp().png({quality: 50})
}

Другие вопросы по теме