Wie kann ich Puffer in cloudinary von Sharp Middleware akzeptieren?

stimmen
0

Bevor diese Frage platzieren, fühlte ich mich ein wenig eingeschüchtert, weil ich schlechte Feedback meiner Fragen bekommen nicht sehr detailliert sind. Ich habe versucht, es so detailliert wie ich konnte tun.

Tor

Ich habe erfolgreich Bilder zu Cloudinary hochgeladen, aber mein Ziel ist es nicht, sie auf dem Server zu speichern. Es ist ihnen durch die Erinnerung an Cloudinary Cloud zu senden. Also habe ich das multer Paket verwenden es durch den Speicher zu senden. Dann bin ich mit dem scharfen Paket, um es zu transformieren, und schließlich ist es die zur Verfügung, die updateMe Route.

Was habe ich versucht? Ich habe versucht , sie durch Puffer Senden des scharfen Paket. Sobald es die Größe verändert wird, dann über den Puffer senden, aber vielleicht mache ich die falschen Konfigurationen.

Ich habe beide Wege kommentiert habe ich versucht, Daten zwischen den beiden Middleware zu senden.

Route


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

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

Bis zu diesem Punkt, wenn ich console.log (req.file) ich den Puffer innerhalb des Objekts erhalten, aber es scheint, durch das scharfe Paket nicht betroffen zu sein, so dass mir einen Hinweis gibt, dass ich es zu Unrecht verwenden. Ich habe dort DOCS versucht, aber ich kann nichts finden, die erzählen, dass ich verstehen könnte (vielleicht die Antwort ist da, aber ich kann es nicht verstehen).

// UpdateMe Route

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

Alle Vorschläge, wie dies erfolgreich zu tun?

Veröffentlicht am 13/02/2020 um 21:53
quelle vom benutzer
In anderen Sprachen...                            

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