Попытка загрузить несколько файлов, используя метод .fields (fields), из Multer - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь загрузить несколько файлов (изображений кроссовок) в указанную папку и базу данных MongoDB с помощью mongoose и PostMan.У меня есть поле для основного изображения и другое поле для галереи, где я могу загрузить до четырех фотографий.Я просмотрел документацию и понял, что метод .fields(fields) будет работать.Вот мой соответствующий код, пытающийся реализовать этот метод.

// Set The Storage Engine
const storage = multer.diskStorage({
  destination: './public/uploads/sneakers',
  filename: function(req, file, cb){
    cb(null,file.fieldname + '-' + Date.now() + path.extname(file.originalname));
  }
});

// Init Upload
const upload = multer({
  storage: storage,
  limits:{
    fileSize: 100000000
  },
  fileFilter: function(req, file, cb){
    checkFileType(file, cb);
  }
});

// Check File Type
function checkFileType(file, cb){

  // Allowed ext
  const filetypes = /jpeg|jpg|png|gif/;

   // Check ext
   const extname = filetypes.test(path.extname(file.originalname).toLowerCase());

   // Check mime
  const mimetype = filetypes.test(file.mimetype);

  if(mimetype && extname){
    return cb(null,true);
  } else {
    cb('Error: Images Only!');
  }

}

router.post(
  "/",
  passport.authenticate("jwt", { session: false }),
  upload.fields(
      [
         { name: 'mainimage', maxCount: 1 },
         { name: 'gallery', maxCount: 8 }
      ]
  ),
  (req, res) => {

    const newSneaker = new Sneaker({
      model: req.body.model,
      colorway: req.body.colorway,
      year: req.body.year,
      text: req.body.text,
      mainimage: req.file.filename,
      gallery: req.file.filename,
    });

    newSneaker.save().then(sneaker => res.json(sneaker));
  }
);

module.exports = router;

Проблема в том, что когда он достигает значения mainimage: req.file.filename, я получаю ошибку TypeError: Cannot read property 'files' of undefined.Хотя, как ни странно, он все еще загружает файлы в указанную папку, тем не менее, он не сохраняет никаких данных в базу данных.

Если я просто загружаю один файл, используя метод .single(fieldname), он работает просто отлично,до загрузки файла и сохранения данных в базе данных.

...