我在我的NodeJS应用程序中使用body-parser,express和multer。 我需要以注册形式上传图片和少量文本字段。我为此使用了multer,我尝试了完全相同的建议 - https://stackoverflow.com/questions/35847293/uploading-a-file-and-passing-a-additional-parameter-with-multer
但是我在req.body中得到了空对象。 正在目标文件夹中创建文件,但req.files.forEach方法记录空结果。
这是我的代码:
Html前端代码
<form id="form" enctype="multipart/form-data" action="/profile" method="post" >
<label>Name</label>
<input type="text" placeholder=" Name" name="name" id="name" class="form-control">
<label>Logo</label>
<input type="file" placeholder="Logo" name="logo" id="logo" class="form-control">
<button id="addform" type="submit" class="btn btn-primary">Add Profile</button>
</form>
服务器端代码:
app.post('/profile', function(req, res) {
var storage = multer.diskStorage({
destination: __dirname+'/file/uploads/'
});
var upload = multer({ storage : storage}).any();
upload(req,res,function(err) {
if(err) {
console.log(err);
return res.end("Error uploading file.");
} else {
console.log(req.body);
console.log(req.files);
req.files.forEach( function(f) {
console.log(f);
// and move file to final destination...
});
res.end("File has been uploaded");
}
});
});
节点中的日志输出:
{}
[]
答案 0 :(得分:0)
尝试将您的Multer移动到req体外,并尝试包含filename参数。我修改了你的代码。
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, __dirname+'/file/uploads/')
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
})
var upload = multer({ storage: storage })
//passing multer as middleware
app.post('/profile',upload.any(), function(req, res) {
console.log(req.body)
});
答案 1 :(得分:0)
请重新检查您的表单,并确保已在输入字段中添加名称属性。我遇到了同样的问题,并且同样地试图查找,但是在查看multer文档时发现,它不会阻塞req.body,而不是我检查表单并发现我的其他字段没有name
属性,只有id是在那里。