Comment puis-je accepter des tampons dans cloudinary de middleware de Sharp?

voix
0

Avant de poser cette question, je me sentais un peu intimidée parce que je reçois une mauvaise évaluation de mes questions ne sont pas très détaillées. comme je pouvais, j'ai essayé de le faire comme détaillé.

Objectif

J'ai téléchargé avec succès images à Cloudinary, mais mon but est de ne pas les enregistrer sur le serveur. Il est de les envoyer par la mémoire vers le cloud Cloudinary. Donc, j'utilise le paquet multer pour l'envoyer par la mémoire. Ensuite, je suis en utilisant le package pointu pour la transformer, et enfin il est la disposition de la route updateMe.

Qu'est - ce que j'essayé? Je l' ai essayé de les envoyer par tampon en utilisant le paquet pointu. Une fois redimensionnée, puis envoyer par tampon, mais peut - être que je fais les mauvaises configurations.

Je l'ai commenté les deux sens que j'ai essayé d'envoyer des données entre les deux intergiciels.

Route


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

contrôleur de l'utilisateur

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

Jusqu'à ce point, si je console.log (req.file) j'obtenir le tampon à l'intérieur de l'objet, mais il semble ne pas être affectée par le paquet pointu, ce qui me donne une certaine idée que je l'utilise à tort. J'ai essayé là-bas DOCS, mais n'a pas pu trouver quelque chose qui raconte que je pouvais comprendre (peut-être la réponse est là, mais je ne peux pas le comprendre).

// itinéraire 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;
  }
}

Toutes les suggestions sur la façon de le faire avec succès?

Créé 13/02/2020 à 21:53
source utilisateur
Dans d'autres langues...                            

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