2016-03-19 20 views
5

複数のファイルタイプフィールドからファイルを受け入れる方法はありますか?複数のファイルをmulterでアップロードしていますが、異なるフィールドからアップロードしていますか?

私はNode.jsの中multer使用して、1つのファイルをアップロードし、次のコードを持っている:私は私の両方を指定した場合を条件に、以下のフォームから

var storage = multer.diskStorage({ 
    destination: function (req, file, callback) { 
    callback(null, './public/uploads'); 
    }, 
    filename: function (req, file, callback) { 
    callback(null, file.fieldname + '-' + Date.now()); 
    } 
}); 

var upload = multer({ storage : storage }); 

app.post('/rest/upload', upload.array('video', 1), function(req, res, next){ 
    ... 
} 

を唯一のビデオフィールドには、(値を持っています「予期しないフィールド」エラーが発生する):

<form action="/rest/upload" method="post" enctype="multipart/form-data"> 
    <label>Video file: </label> <input type="file" name="video"/> 
    <label>Subtitles file: </label> <input type="file" name="subtitles"/> 
    <input type="submit"/> 
</form> 

これはどのようにアプローチするのかはっきりしていませんか?任意の提案をいただければ幸いです。ところで、私は成功せず、次のパラメータのバリエーションを試してみました:

app.post('/rest/upload', [upload.array('video', 1), upload.array('subtitles', 1)] ... 
app.post('/rest/upload', upload.array('video', 1), upload.array('subtitles', 1), ... 
app.post('/rest/upload', upload.array(['video', 'subtitles'], 1), ... 

答えて

12

何が欲しいのupload.fields()です:

app.post('/rest/upload', 
     upload.fields([{ 
      name: 'video', maxCount: 1 
     }, { 
      name: 'subtitles', maxCount: 1 
     }]), function(req, res, next){ 
    // ... 
} 
2

あなたはmulter().any()を使用しようとしましたか?

+0

私はいなかった、ドキュメントが示唆するように、私は、アプローチ)(uploads.fieldsに行くよものの任意の()は、おそらく最善のアプローチから、ではありません取り扱いとセキュリティの観点。 –

関連する問題