在使用Express进行节点强大的上传时,请使用多个文件进行操作

在Express上上传文件与node-formidable一样简单

app.post('/upload', function(req, res) { // do something with req.files }); 

这些文件现在保存

表单:(多=“多”是一个HTML5function,允许用户select多个file upload)

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

如果我将这一行添加到上传代码

 console.log(req.files.upload.path); 

上传一个文件时,path显示在控制台中。 但是当我上传多个文件时,它只是说在控制台中未定义。 我如何获得每个文件的日志? 使用for循环?

GitHub上的节点强大的例子,当你上传几个日志时logging每个文件: https : //github.com/felixge/node-formidable/blob/master/example/upload.js (我试过在Express中使用这个代码,没有工作)它正是我想要的,但我如何在快速应用程序中做到这一点?

它通过将下面的行移动到app.configure函数的底部来工作。 在这里阅读有关中间件订单的重要性: http : //expressjs.com/guide.html#middleware

 app.use(express.bodyParser({ uploadDir:__dirname + '/public/uploads' })); 

并通过使用这个处理程序:

 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); }); 

谢谢瑞恩!

所以req.files可以是一个数组。 尝试在处理程序中执行console.log(req.files) ,看看它是什么样的…但我认为你最好像在他们的例子中那样做。 你可以通过删除顶部的../test/common require并将常量改为静态值(例如,而不是TEST_TMP使用__dirname + '/uploads' )来TEST_TMP

处理程序:

 var form = new formidable.IncomingForm(), files = [], fields = []; form.uploadDir = __dirname + '/uploads'; form .on('field', function(field, value) { console.log(field, value); fields.push([field, value]); }) .on('file', function(field, file) { console.log(field, file); files.push([field, file]); }) .on('end', function() { console.log('-> upload done'); res.writeHead(200, {'content-type': 'text/plain'}); res.write('received fields:\n\n '+util.inspect(fields)); res.write('\n\n'); res.end('received files:\n\n '+util.inspect(files)); }); form.parse(req); 

这些文件现在在__dirname + '/uploads' ,按照控制台上的输出命名(和响应,就像您在end处理程序中看到的那样)。