我有一个from可以一次上传文本和图片。我正在使用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)
})
马尔特上传代码:
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
函数中,并且在未定义之前可以正常运行。
答案 0 :(得分:1)
在上传功能中全部写下来:
upload(req, res, (err) => {
filename = req.file.filename;
const product = {
title: req.body.title,
image: filename,
};
console.log(product)
})
这很简单,您错过了它。