NodeJS与数组的多部分/表格数据
问题描述:
我在使用enctype multipart/form-data
和发送具有相同名称的输入作为数组时获得一些麻烦。我只能似乎获得上传图像或阵列的输入,但不能两者都在同一时间...NodeJS与数组的多部分/表格数据
例如,我有这样的形式:
<form method="post" action="/test">
<input name="testinput" value="valueA">
<input name="testinput" value="valueB">
<input type="file" name="fileattachment">
<input type="submit" value="Submit">
</form>
如果我设置表单的ENCTYPE到是multipart/form-data
,像这样:
<form method="post" action="/test" enctype="multipart/form-data">
我最终接受了“FileAttachment的”只是在我的应用程序的NodeJS罚款,但我只获得最后值“testinput”,像这样:
//req.body
//---
{
testinput: 'valueB' // I'm missing valueA!
}
//req.files
//---
{
fileattachment: {
name: 'biglogo.png',
data: <Buffer 89 ... >,
encoding: '7bit',
mimetype: 'image/png',
mv: [Function]
}
}
如果未设置的加密类型,在“testinput”数据来作为一个数组,但“FileAttachment的”丢失,我只得到了上传的文件名,如:
//req.body
//---
{
testinput: ['valueA', 'valueB'],
fileattachment: 'some_picture.png' // Useless for file uploading
}
我认为这与我设置快速“body parser”的方式有关,但我似乎无法弄清楚正确的配置。这是我的设置(简化了相关的代码):
var express = require('express');
var fileUpload = require('express-fileupload');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
app.use(fileUpload()); // Must be placed after, not before, bodyparser's use, otherwise files fail to be uploaded correctly...
app.post('/test', function(req, res) {
// Some code
});
此外,这是我的package.json文件:
{
"name": "my-app",
...
"dependencies": {
"body-parser": "~1.15",
"express": "~4.14",
"express-fileupload": "^0.0.5"
}
}
这是node/6.9.1
运行我已经看到了这个非常类似的问题Multipart/form-data with arrays,但它是2岁,未答复,似乎并没有使用依赖fileUpload
。
而且,我试图回答这个问题Handling input arrays in Express forms?提出的方法,但我不断收到对服务器看起来是文字而不是阵列,像这样:
{
'something[0][testinput]': 'valueA',
'something[1][testinput]': 'valueB'
}
我缺少什么?我应该尝试什么?
答
我能够通过从express-fileupload
切换,以获得所期望的结果来Multiparty
的设置:
var express = require('express');
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
我的代码:
var multiparty = require('multiparty');
app.post('/test', function(req, res) {
(new multiparty.Form()).parse(req, function(err, fields, files) {
// handling fields and files code
});
});
字段:
{
testinput: ['valueA', 'valueB']
}
个
文件:
{
fileattachment: [
{
fieldName: 'fileattachment',
originalFilename: 'biglogo.png',
path: '/tmp/blablaasdfgh.png',
headers: [Object],
size: 10130
}
]
}
正如你可以看到输入阵列上捆绑在一起,文件似乎是正确收到。