我想做的是使用猫鼬和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)
方法上传单个文件,那么就上传文件并将数据保存到数据库而言,它工作得很好。