尝试使用Multer的.fields(fields)方法上传多文件

时间:2019-01-27 05:42:14

标签: node.js mongodb mongoose postman multer

我想做的是使用猫鼬和PostMan将多个文件(运动鞋的图片)上传到指定的文件夹和MongoDB数据库。我有一个用于主图像的字段,另一个有用于图库的字段,我可以在其中上传最多四张图片。我仔细阅读了文档,发现.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)方法上传单个文件,那么就上传文件并将数据保存到数据库而言,它工作得很好。

0 个答案:

没有答案