2016-10-27 4 views
2

enctype multipart/form-dataの使用に問題があり、同じ名前の入力を配列として取得するのに問題があります。私は、フォームのenctypeを設定した場合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> 

:私だけ...同時に両方例えば

をアップロードした画像や配列の入力を求めるように見えることはできませんが、私は、このフォームを持っています私は私のNodeJSアプリでうまく「fileattachment」を受信して​​しまう

<form method="post" action="/test" enctype="multipart/form-data"> 

、しかし、私はこれだけのように、「testinput」の最後の値を取得する:このように、multipart/form-dataこと

//req.body 
//--- 
{ 
    testinput: 'valueB' // I'm missing valueA! 
} 

//req.files 
//--- 
{ 
    fileattachment: { 
     name: 'biglogo.png', 
     data: <Buffer 89 ... >, 
     encoding: '7bit', 
     mimetype: 'image/png', 
     mv: [Function] 
    } 
} 

のenctypeが設定されていない場合は、次のように、「testinput」データを配列として来て、しかし「fileattachmentが」失われ、私はアップロードされたファイルの名前を取得する:私は

//req.body 
//--- 
{ 
    testinput: ['valueA', 'valueB'], 
    fileattachment: 'some_picture.png' // Useless for file uploading 
} 

明示的なボディパーサーを設定したやり方と関係があると思うが、正しい設定を理解できないようだ。これは私の(関連するコードのために簡略化)の設定です:私はこれを見てきました。これは、node/6.9.1

上で実行されている

{ 
    "name": "my-app", 
    ... 
    "dependencies": { 
     "body-parser": "~1.15", 
     "express": "~4.14", 
     "express-fileupload": "^0.0.5" 
    } 
} 

:また

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ファイルであります非常によく似た質問Multipart/form-data with arraysですが、2歳で未回答であり、依存関係fileUploadを使用していないようです。

はまた、私はこの質問Handling input arrays in Express forms?への答えによって提案されたアプローチを試みたが、私は、サーバー上に見える得続けるすべてはこのように、テキストの代わりの配列である:

{ 
    'something[0][testinput]': 'valueA', 
    'something[1][testinput]': 'valueB' 
} 

は、私が何をしないのですか?私は何を試すべきですか?

答えて

0

Iはexpress-fileuploadMultiparty

からセットアップを切り替えることにより、所望の結果を得ることができた:

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

あなたは入力を見ることができるようにアレイ上で束ね、およびファイルが正しく受け取っているように見えるされています。

関連する問題