Как я могу использовать буфер для загрузки в Cloudinary как изображение. В буфере, использующем Sharp, я указываю, что это JPEG. Я не хочу сохранять его на сервере, поэтому я обрабатываю изображение и отправляю его через объект req
exports.resizeUserPhoto = async (req, res, next) => {
if (!req.file) return next();
req.file.filename = `user-${req.user.id}-${Date.now()}.jpeg`;
const processedImage = await sharp(req.file.buffer)
.resize(150, 150)
.toFormat("jpeg")
.jpeg({ quality: 90 })
.toBuffer();
//saving the buffer to a new file object
req.file.processedImage = processedImage;
next();
};
exports.updateMe = catchAsync(async (req, res, next) => {
if (req.file) {
console.log(req.file.processedImage); //returns <Buffer ....... >
const result = await cloudinary.uploader.upload(req.file.processedImage, {
use_filename: true,
folder: `${req.user.id}/profile/`
});
filteredBody.photo = result.url;
}
}
*** Обновление: позже я узнал, что оно может также можно сделать с помощью DataUri, но как-то читать на форумах, что это замедляет работу сервера ... что я не знаю, правда это или нет.
Кроме того, большая часть моей проблемы связана с этим методом: cloudinary.uploader.upload_stream . Он говорит, что возвращает обещание, которое не соответствует действительности.
Я задал вопрос на форуме Cloudinary. Я отправлю ответ здесь.