У меня есть возможность загружать текст и изображение одновременно.Я использую multer и body-parser.но когда я даю enctype="multipart/form-data"
для формирования req.body
, не получая никакого значения.
<form method="post" action="/admin/dashbord/product" enctype="multipart/formdata">
<div class="form-group">
<label for="source">Title</label>
<input type="text" name="title" class="form-control" id="source" value="{{product.title}}" placeholder="Enter Title">
</div>
<div class="form-group">
<label for="source">Image</label>
<input type="file" name="image" class="form-control" id="source" placeholder="Enter Title">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
Маршрутизатор:
router.post('/product', function (req, res) {
var filename;
upload(req, res, (err) => {
filename = req.file.filename
})
const product = {
title: req.body.title,
image: filename,
};
console.log(product)
})
Multer Код загрузки:
const storage = multer.diskStorage({
destination: './public/uploads/',
filename: function(req, file, cb){
cb(null,file.fieldname + '-' + Date.now() + path.extname(file.originalname));
}
});
// Инициализация загрузки
const upload = multer({
storage: storage,
limits:{fileSize: 1000000},
fileFilter: function(req, file, cb){
checkFileType(file, cb);
}
}).single('image');
// 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!');
}
}
, если я работаю без enctype
, анализатор тела работает хорошо. В противном случае получаем неопределенное значение.
, если я консоль imagename
в upload
, функция работает хорошо снаружистановится неопределенным.