Как я могу принять буфера в cloudinary от Sharp промежуточного слоя?

голоса
0

Перед установкой на этот вопрос, я чувствовал себя немного запуганы, потому что я получаю плохую обратную связь мои вопросы не очень подробно. Я пытался делать это, как описано, как я мог.

Цель

Я успешно загрузил фотографии в Cloudinary, но моя цель состоит в том, чтобы не сохранять их на сервере. Это послать их через память Cloudinary облака. Поэтому я использую пакет multer, чтобы отправить его через память. Затем я использую острый пакет, чтобы преобразовать его, и, наконец, это доступно на маршрут updateMe.

Что я пробовал? Я пытался посылать их через буфер , используя острый пакет. После того, как она изменяется, а затем отправить через буфер, но , может быть , я делаю неправильные конфигурации.

Я прокомментировал оба пути я пытался передавать данные между двумя промежуточными программным.

маршрут


router.patch(
  /updateMe,
  authController.protect,
  userController.uploadUserPhoto,
  userController.resizeUserPhoto,
  userController.updateMe
);

контроллер пользователя

//using the multer package
const multerStorage = multer.memoryStorage();

const multerFilter = (req, file, cb) => {
  if (file.mimetype.startsWith(image)) {
    cb(null, true);
  } else {
    cb(new AppError(Not an image! Please upload only images., 400), false);
  }
};

const upload = multer({
  storage: multerStorage,
  fileFilter: multerFilter
});

exports.uploadUserPhoto = upload.single(photo);

//using the sharp package to resize images
exports.resizeUserPhoto = async (req, res, next) => {
  if (!req.file) return next();

  req.file.filename = `user-${req.user.id}-${Date.now()}.jpeg`;

  sharp(req.file.buffer)
    .resize(200, 200)
    .toFormat(jpeg)
    .jpeg({ quality: 90 })
  // .toBuffer({ resolveWithObject: true }); //this is commented because I had no result using them
  // .toFile() // This one will save to local path to server

  next();
};

До этого момента, если я console.log (req.file) Я получаю буфер внутри объекта, но это, кажется, не зависит от острого пакета, так что это дает мне некоторое представление, что я использую его неправомерно. Я пытался там DOCS, но не смогли найти ничего, что связано, что я мог понять (может быть, ответ есть, но я не могу понять).

// маршрут UpdateMe

exports.updateMe = catchAsync(async (req, res, next) => {

// validation functions go here

//**here I have even tried cloudinary.uploader.upload(req.file.buffer)... and nothing happens**

if (req.file) {
    const result = await cloudinary.uploader.upload(req.file.path, {
      use_filename: true,
      folder: `${req.user.id}/profile/`
    });
    filteredBody.photo = result.url;
  }
}

Любые предложения о том, как сделать это успешно?

Задан 13/02/2020 в 23:53
источник пользователем
На других языках...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more