我有以下用JADE写的表格
<form id="formAddchallandetails" action="/adddata" method="post" name="adduser">
<input id="inputunloadingDestination1" type="text" name="finalchallan[1][unloadingDestination]" placeholder="unloading Destination">
<input id="inputCCNFForm1" type="text" name="finalchallan[1][CCNFForm]" placeholder=" Challan Number">
<input id="inputtollCopy1" type="file" name="finalchallan[1][tollCopy]" >
<input id="inputunloadingDestination1" type="text" name="finalchallan[2][unloadingDestination]" placeholder="unloading Destination">
<input id="inputCCNFForm2" type="text" name="finalchallan[2][CCNFForm]" placeholder=" CCNF form">
<input id="inputtollCopy2" type="file" name="finalchallan[2][tollCopy]" >
<button id="btnSubmit" type="submit">submit</button>
</form>
我希望此表单在Express.js
中将文件和其他数组的数据发布为JSON对象我的app.js
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));//set to true for passing array objects from form to route
app.use(cookieParser());
app.use(bodyParser({ keepExtensions: true, uploadDir: "uploads" }));
我的index.js
router.post('/adddata', function(req, res) {
console.log("body");
console.log(req.body);
console.log("files");
console.log(req.files);
});
收到的输出是:
body
{
finalchallan:
[
{
unloadingDestination: 'sdcsdf',
CCNFForm: 'zsd',
tollCopy:'abc.txt',
},
{
unloadingDestination: 'sdcsdf',
CCNFForm: 'zsd',
tollCopy:'xyz.txt',
}
],
tollCopy: '' }
files
undefined
预期输出是接收如上所示的JSON数据,并接收带有filename,tmpname等的所有文件数据,以将文件保存在目录中。 目前我只获取文件名。
尝试了选项:
如果我使用 multer 和/或更改 enctype =“multipart / form-data”形式,而不是以对象形式传递我的JSON数据而是考虑它是字符串。
答案 0 :(得分:1)
不打算在同一请求上合并多个内容类型,如果您发送application/json
内容类型,则服务器将期望所有数据都采用该格式。因此,解析器将不会处理文件内容。一种选择是使用multipart/form-data
并将您的JSON数据作为字符串发送,然后使用JSON.parse()
在服务器中将其转换为JSON。另一种选择是将文件上传分开在另一条路径中。并为此发送两个单独的请求。