Cum pot accepta tampoane în cloudinary de la Sharp middleware?

voturi
0

Înainte de a plasa această întrebare, m-am simțit un pic intimidat pentru că am obține feedback-ul rău întrebările mele nu sunt foarte detaliate. Am încercat o fac la fel de detaliat ca am putut.

Poartă

Am încărcat cu succes imagini la Cloudinary, dar scopul meu nu este de a le salva pe server. Este pentru a le trimite prin memorie pentru a nor Cloudinary. Deci, eu sunt, folosind pachetul multer să-l trimită prin memorie. Apoi am folosit pachetul ascuțit pentru ao transforma, și în cele din urmă este disponibil pe ruta updateMe.

Ce am încercat? Am încercat de a le trimite prin tampon folosind pachetul ascuțite. Odată ce este redimensionată, apoi trimite prin tampon, dar poate eu fac configurațiile greșit.

Am comentat ambele moduri, am încercat să trimită date între cele două middleware-uri.

Traseu


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

controler utilizator

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

Până în acest moment, dacă console.log (req.file) I a lua tamponul in interiorul obiectului, dar se pare a fi afectată de pachetul ascuțit, astfel încât îmi dă un indiciu că eu sunt, folosind în mod greșit. Am încercat acolo DOCS, dar nu a putut găsi ceva care relatează că am putut înțelege (poate răspunsul este acolo, dar nu pot să-l înțeleg).

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

Orice sugestii cu privire la modul de a face acest lucru cu succes?

Întrebat 13/02/2020 la 21:53
sursa de către utilizator
În alte limbi...                            

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