使用带有Express的node-formidable上传它们时,可以处理多个文件

Fro*_*ode 8 node.js express

在Express上使用node-formidable上传文件就像这样简单

app.post('/upload', function(req, res) {
    // do something with req.files
});
Run Code Online (Sandbox Code Playgroud)

现在保存文件

表单:( multiple ="multiple"是HTML5功能,允许用户选择要上传的多个文件)

<form method="post" enctype="multipart/form-data" action="upload">
    <input type="text" name="title"/>
    <input type="file" name="upload" multiple="multiple"/>
    <input type="submit" value="upload" id="s3form_submit"/>
</form>
Run Code Online (Sandbox Code Playgroud)

如果我将此行添加到上传代码中

console.log(req.files.upload.path);
Run Code Online (Sandbox Code Playgroud)

上传一个文件时,路径会显示在控制台中.但是当我上传多个文件时,它只是在控制台中显示为undefined.如何获取每个文件的日志内容?使用for循环?

当您上传多个文件时,GitHub上的节点强大的示例会记录每个文件:https://github.com/felixge/node-formidable/blob/master/example/upload.js(我尝试在Express中使用此代码,但没有它正是我想要的,但我如何在Express应用程序中执行此操作?

Fro*_*ode 10

它的工作原理是将下面一行移动到app.configure函数的底部.在此处阅读有关Express中间件订单的重要性:http://expressjs.com/guide.html#middleware

app.use(express.bodyParser({ uploadDir:__dirname + '/public/uploads' }));
Run Code Online (Sandbox Code Playgroud)

并通过使用此处理程序:

app.post('/upload', function(req, res){
    var form = new formidable.IncomingForm(),
    files = [],
    fields = [];
    form.on('field', function(field, value) {
        fields.push([field, value]);
    })
    form.on('file', function(field, file) {
        console.log(file.name);
        files.push([field, file]);
    })
    form.on('end', function() {
        console.log('done');
        res.redirect('/forms');
    });
    form.parse(req);
});
Run Code Online (Sandbox Code Playgroud)

谢谢瑞恩!