Jak mogę zaakceptować buforów cloudinary ostrych middleware?

głosy
0

Przed wprowadzeniem na to pytanie, czułem się trochę onieśmielony, bo mam złe informacje zwrotne z moich pytań nie są bardzo szczegółowe. Próbowałem to robić w sposób opisany jak mogłem.

Cel

Mam pomyślnym przesłaniu zdjęć do Cloudinary, ale moim celem jest, aby nie zapisywać je na serwerze. To wysyłać je za pośrednictwem pamięci chmurze Cloudinary. Więc używam pakiet multer wysłać go za pośrednictwem pamięci. Następnie używam ostry pakiet, aby go przekształcać, i wreszcie jest dostępny na trasie updateMe.

Czego próbowałem? Próbowałem wysyłając je za pośrednictwem bufora używając ostrego pakietu. Gdy jest zmieniany, a następnie wysłać za pośrednictwem bufora, ale może robię źle konfiguracje.

I zauważyli, obie strony starałem się przesłać dane między dwoma middleware.

Trasa


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

kontroler użytkownik

//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();
};

Do tego momentu, jeśli console.log (req.file) mam bufor wewnątrz obiektu, ale wydaje się być nienaruszone przez ostry opakowaniu, tak że daje mi jakąś wskazówkę, że używam go bezprawnie. Próbowałem tam dokumentów, ale nie mógł znaleźć coś, co odnosi się, że mogę zrozumieć (może odpowiedź jest tam, ale nie mogę go zrozumieć).

// trasa 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;
  }
}

Wszelkie sugestie, w jaki sposób to zrobić skutecznie?

Utwórz 13/02/2020 o 21:53
źródło użytkownik
W innych językach...                            

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