如何使用ExpressJS 4上传文件?

从ExpressJS 4 API ,我发现req.files是无效的。 现在如何使用ExpressJS 4来上传文件?

express.bodyParser默认不包含在express 4中。 您必须单独安装。 请参阅https://github.com/expressjs/body-parser

例如:

 var bodyParser = require('body-parser'); var app = connect(); app.use(bodyParser()); app.use(function (req, res, next) { console.log(req.body) // populated! next(); }) 

也有节点强大的

 var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files) { res.writeHead(200, {'content-type': 'text/plain'}); res.write('received upload:\n\n'); res.end(util.inspect({fields: fields, files: files})); }); return; 

我是这样做的:

 form = new formidable.IncomingForm(); form.uploadDir = __dirname.getParent() + "/temp/"; form.parse(req, function(err, fields, files) { var newfile, path, uid, versionName; uid = uuid.v4(); newfile = __dirname.getParent() + "/uploads/" + uid; copyFile(files.file.path, newfile, function(err) { if (err) { console.log(err); req.flash("error", "Oops, something went wrong! (reason: copy)"); return res.redirect(req.url); } fs.unlink(files.file.path, function(err) { if (err) { req.flash("error", "Oops, something went wrong! (reason: deletion)"); return res.redirect(req.url); } // done! // ... }); }); }); 

升级后,我只是有这个问题,其中req.files未定义。 我用multer修复了它。

所以,

 npm install multer 

然后在你的app.js中

 var multer = require('multer'); app.use(multer({ dest: './tmp/'})); 

之后我不必改变任何东西,所有旧function都能正常工作。