#mongodb #express #cloudinary
Вопрос:
Я хотел бы хранить аватары пользователей в папке, отличной от папки продукта в Cloudinary.
Я пытался это сделать, но это не работает. Как я могу использовать две разные папки в одном проекте?
Конфигурация Cloudinary:
const cloudinary = require('cloudinary').v2;
const { CloudinaryStorage } = require('multer-storage-cloudinary');
const multer = require('multer')
cloudinary.config ({
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
api_key: process.env.CLOUDINARY_KEY,
api_secret: process.env.CLOUDINARY_SECRET
})
// PARA ALMACENAR LAS IMAGENES DE LOS PRODUCTOS
const storage = new CloudinaryStorage ({
cloudinary: cloudinary,
params:{
folder: 'ProductosMarketV2',
allowedFormats : ['jpeg', 'png', 'jpg'],
// transformation: [{ width: 640, height: 480, crop:'fit'}],
}
});
const parser = multer({storage})
//PARA ALMACENAR LAS IMAGENES DE LOS AVATARES DE USUARIOS
const storage2 = new CloudinaryStorage ({
cloudinary: cloudinary,
params:{
folder: 'ProductosMarketV2/AvataresUsuarios',
allowedFormats : ['jpeg', 'png', 'jpg'],
// transformation: [{ width: 640, height: 480, crop:'fit'}],
}
});
const parser2 = multer({storage2})
module.exports = {
cloudinary,
storage,
parser,
parser2
}
parser
работает, если я использую аватар или продукт и сохраняю изображения в правильной модели в MongoDB. Но если я использую a parser2
, это не сработает.
В моих маршрутах parser
работает и сохраняет URL-адрес и имя файла в модели аватара mongodb:
router.post('/avatar/:id',
auth,
parser.single('imagesAvatar'),
users.crearAvatar
);
с parser2 не работает:
router.post('/avatar/:id',
auth,
parser2.single('imagesAvatar'),
users.crearAvatar
);
Спасибо за вашу помощь.
Комментарии:
1. Когда вы упоминаете, что это не работает, не могли бы вы поделиться дополнительной информацией об этом? Вы получаете какие-либо ошибки при использовании parser2, действительно ли вызывается эта часть кода? Загружается ли изображение всегда в папку «ProductosMarketV2» даже с обоими анализаторами?
2. Это не работает. У меня есть две конфигурации, и когда я пытаюсь использовать de parser2, не отправляйте изображение в cloudinary, сохраняйте и возвращайте данные (URL и имя файла), но если я использую синтаксический анализатор, он работает отлично. Я хотел бы отдельно хранить аватар пользователей и изображения продуктов……что-нибудь помогает? Спасибо
Ответ №1:
Я действительно нашел решение:
Вы можете настроить свои облачные данные:
const cloudinary = require('cloudinary').v2;
const { CloudinaryStorage } = require('multer-storage-cloudinary');
const multer = require('multer')
cloudinary.config ({
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
api_key: process.env.CLOUDINARY_KEY,
api_secret: process.env.CLOUDINARY_SECRET
})
// PARA ALMACENAR LAS IMAGENES DE LOS PRODUCTOS
const storage = new CloudinaryStorage ({
cloudinary: cloudinary,
params:{
folder: 'ProductosMarketV2',
allowedFormats : ['jpeg', 'png', 'jpg'],
// transformation: [{ width: 640, height: 480, crop:'fit'}],
}
});
//PARA ALMACENAR LAS IMAGENES DE LOS AVATARES DE USUARIOS
const storage2 = new CloudinaryStorage ({
cloudinary: cloudinary,
params:{
folder: 'ProductosMarketV2/AvataresUsuarios',
allowedFormats : ['jpeg', 'png', 'jpg'],
// transformation: [{ width: 640, height: 480, crop:'fit'}],
}
});
const parser = multer({storage: storage})
//const parser2 = multer({storage2})
module.exports = {
cloudinary,
storage,
storage2,
parser
}
а затем в маршрутах вместо этого используйте:
const { parser, storage2} = require ('../cloudinary')
const multer = require('multer')
router.put("/editar/:id",
auth,
parser.single("imagesAvatar"),//with the folder name in the configuration of cloudinary
users.editarUsuario
);
//use multer({storage: 'the folder name')} and allways works
router.put("/editar/:id",
auth,
multer({storage: storage2}).single("imagesAvatar"),
users.editarUsuario
);