¿Cómo puedo aceptar memorias intermedias en cloudinary de Sharp middleware?

votos
0

Antes de colocar a esta pregunta, me sentí un poco intimidado porque consigo la mala reacción de mis preguntas no están muy detallados. He intentado hacerlo lo más detallado que pude.

Objetivo

He subido con éxito imágenes a Cloudinary, pero mi objetivo no es guardarlos en el servidor. Es para enviarlos a través de la memoria de la nube Cloudinary. Así que estoy usando el paquete multer a enviarlo a través de la memoria. Entonces estoy usando el paquete de afilado para transformarla, y finalmente es el que dispone la ruta updateMe.

¿Qué he intentado? He tratado de enviarlos a través de buffer usando el paquete agudo. Una vez que se cambia el tamaño, a continuación, enviar a través de amortiguamiento, pero tal vez estoy haciendo las configuraciones erróneas.

He comentado en ambos sentidos He intentado enviar datos entre los dos middleware.

Ruta


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

usuario del controlador

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

Hasta este punto, si console.log (req.file) me sale el tampón dentro del objeto, pero parece no estar afectada por el paquete agudo, lo que me da alguna pista que lo estoy usando indebidamente. He tratado allí Docs, pero no pude encontrar nada que se relacione que pude entender (tal vez la respuesta es no, pero no puedo entenderlo).

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

¿Alguna sugerencia sobre cómo hacer esto con éxito?

Publicado el 13/02/2020 a las 23:53
fuente por usuario
En otros idiomas...                            

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