Изображения не сохраняются в базе данных с помощью multer

#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 определена в глобальном контексте и не имеет никакого отношения к вашему запросу