NodeJS与数组的多部分/表格数据

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 
     } 
    ] 
} 

正如你可以看到输入阵列上捆绑在一起,文件似乎是正确收到。