Я пытаюсь загрузить несколько файлов (изображений кроссовок) в указанную папку и базу данных 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)
, он работает просто отлично,до загрузки файла и сохранения данных в базе данных.