Hvordan kan jeg aksepterer buffere i cloudinary fra Sharp mellomvare?

stemmer
0

Før du plasserer dette spørsmålet, følte jeg litt skremt fordi jeg får dårlig tilbakemelding på mine spørsmål ikke blir veldig detaljert. Jeg prøvde å gjøre det så detaljert som jeg kunne.

Mål

Jeg har lastet opp bilder til Cloudinary, men mitt mål er ikke å lagre dem på serveren. Det er å sende dem gjennom minnet til Cloudinary sky. Så jeg bruker multer pakke å sende den gjennom minnet. Så jeg bruker den skarpe pakke for å forvandle det, og til slutt er det tilgjengelig for updateMe ruten.

Hva har jeg prøvd? Jeg har prøvd å sende dem gjennom buffer ved bruk av skarpe pakken. Når det er endret, så sender gjennom buffer, men kanskje jeg gjør feil konfigurasjoner.

Jeg har kommentert begge veier Jeg har prøvd å sende data mellom de to middlewares.

Rute


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

Bruker controller

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

Inntil dette punktet, hvis jeg console.log (req.file) Jeg får bufferen i objektet, men det synes å være upåvirket av den kraftige pakken, slik som gir meg noen anelse om at jeg bruker det urettferdig. Jeg har prøvd det Dokumenter, men kunne ikke finne noe som forteller at jeg kunne forstå (kanskje svaret er der, men jeg kan ikke forstå det).

// UpdateMe rute

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

Noen forslag på hvordan du gjør dette med hell?

Publisert på 13/02/2020 klokken 23:53
kilden bruker
På andre språk...                            

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