Jak mohu přijímat vyrovnávacích pamětí v cloudinary z Sharp middleware?

hlasů
0

Před umístěním na tuto otázku, cítil jsem trochu strach, protože mám špatnou zpětnou vazbu mé otázky nejsou příliš podrobné. Snažil jsem se dělat to, jak je podrobně, jak jsem mohl.

Fotbalová branka

Úspěšně jsem nahrané snímky do Cloudinary, ale mým cílem není, aby je zachránil na serveru. Je to poslat přes paměti Cloudinary mrak. Takže jsem pomocí balíčku multer jej poslat prostřednictvím paměti. Pak jsem pomocí ostrého balíček ji transformovat a nakonec je na trase updateMe dostupné.

Co jsem se snažil? Snažil jsem se poslat je přes vyrovnávací paměti pomocí ostrého balíček. Jakmile je změněna, pak poslat přes vyrovnávací paměti, ale možná, že dělám špatné konfigurace.

Jsem uvedl v obou směrech jsem se snažil poslat data mezi dvěma middleware.

Trasa


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

regulátor uživatel

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

Až do tohoto bodu, když jsem console.log (req.file) Mám vyrovnávací paměti uvnitř objektu, ale to se zdá být ovlivněno prudkým obalu, takže mi dává nějaké vodítko, že jsem to s použitím neprávem. Zkoušel jsem tam DOKUMENTY, ale nemohl najít nic, co se týká, že bych mohl rozumět (možná odpověď je tam, ale nemohu pochopit).

// UpdateMe trasa

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

Nějaké návrhy na to, jak to udělat úspěšně?

Položena 13/02/2020 v 23:53
zdroj uživatelem
V jiných jazycích...                            

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