Как я могу преобразовать буфер изображения в фотографию для загрузки в Cloudinary? - PullRequest
1 голос
/ 14 февраля 2020

Как я могу использовать буфер для загрузки в 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. Я отправлю ответ здесь.

1 Ответ

0 голосов
/ 14 февраля 2020
exports.updateMe = catchAsync((req, res, next) => {
  return new Promise((resolve, reject) => {
    if (req.file) {
      // console.log(req.file.processedImage.toString('base64'));
      cloudinary.v2.uploader.upload_stream({ resource_type: 'raw' }, (err, res) => {
        if (err) {
          console.log(err);
          reject(err);
        } else {
          console.log(`Upload succeed: ${res}`);
          // filteredBody.photo = result.url;
          resolve(res);
        }
      }).end(req.file.processedImage);
    }
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...