#node.js #mongodb #multer
#node.js #mongodb #multer
Вопрос:
Я пытаюсь сохранить изображение в локальной папке и сохранить имя изображения в mongodb, используя multer
приведенный ниже код.
var uploadDir=__dirname '/assets/images';
var images='.jpg';
var storage=multer.diskStorage({
destination:function(req, file, cb){
cb(null, uploadDir);
},
filename:function(req, file, cb){
console.log(file);
image=Date.now() images;
callback(null, images);
}
});
var upload=multer({storage:storage}).single('img');
Но он не сохраняет изображение в локальной папке, а только его .jpg
строку сохранения в поле изображения в mongodb. Я думаю, проблема в том, что filename:
метод не работает. Пожалуйста, просмотрите это и помогите мне найти решение.
Спасибо,
Комментарии:
1. Как вы регистрируете промежуточное программное обеспечение multer в своем маршруте? Можете ли вы также предоставить этот фрагмент кода?
2.
apiRoutes.post('/adcreate',upload ,function(req, res, next){ /*---- insert data code--*/ })
3. Только что опубликовал ответ ниже. Это промежуточное программное обеспечение зарегистрировано правильно, и ошибка заключается в определении вашей конфигурации multer.
4. @Svabael опубликованный выше код отлично работает в моем последнем приложении. Но это не работает в моем текущем приложении. Я не могу найти ошибку. Пожалуйста, помогите мне.
Ответ №1:
Ваша ошибка в конфигурации имени файла multer. Вы использовали там переменную images и именно поэтому сохраняли изображение не по правильному пути и только с именем .jpg. Рекомендуется определить var image
как var, иначе они будут определены в глобальном пространстве имен с побочными эффектами, которые вы не можете предсказать. Это должно сработать:
var uploadDir=__dirname '/assets/images';
var images='.jpg';
var storage=multer.diskStorage({
destination:function(req, file, cb){
cb(null, uploadDir);
},
filename:function(req, file, cb){
console.log(file);
var image=Date.now() images;
callback(null, image);
}
});
Комментарии:
1. @SaurabhSharma в чем ошибка? Вы не публиковали ошибку раньше. Вы только что сказали, что изображения не сохраняются с правильным именем и в правильном каталоге. У вас уже есть этот результат?
2. да …. на моей консоли не отображается никаких ошибок. Я опубликовал этот вопрос, потому что я не могу сохранить изображение в папке и имя изображения в mongodb
3. @SaurabhSharma опубликованный вами фрагмент кода ничего не сохранит в mongo. Он просто сохранит их в каталоге, который вы указали здесь:
var uploadDir=__dirname '/assets/images';
4. Я знаю … приведенный выше фрагмент кода не сохранит имя изображения в БД. но я буду использовать
image
переменную для сохранения его в БД. например, какapiRoutes.post('/adcreate',upload ,function(req, res, next){ var ad=new admodel({image:image}) ; ad.save(function(err, data){ if(err){ return res.json({success:false, msg:'Ad not Posted'}); }else{ res.json({succes:true, msg:'Successfully ad Posted'}); } }); });
5. Эта строка неверна
var ad=new admodel({image:image}) ;
. Что это заimage
переменная? Вам необходимо извлечь данные из req.file. Переменная image it определена в глобальном контексте и не имеет никакого отношения к вашему запросу