使用Express上传文件(node.js)

我试图做一个非常简单的file upload服务器node.js和expression4.0.0。 根据http://howtonode.org/really-simple-file-uploads我想我应该得到“req.files”,但它不存在(是未定义的)。

var express = require('express') var fs = require('fs') var app = express() app.get('/', sendForm) app.post('/upload', uploadFile) app.listen(8000) function sendForm(req, res) { // a form with a <input type="file"> res.send('<!doctype html><html><head></head><body><form action=\"/upload\" method=\"post\" enctype=\"multipart/form-data\"><input type=\"file\" name=\"displayImage\"><button type=\"submit\">submit</button></form></body></html>') } function uploadFile(req, res) { console.log(req.files) // prints undefined res.redirect('back') } 

有些网站build议添加“app.use(bodyParser)”,并通过“app.configure()”来调用。 据我所知,“app.configure”已经从express 4.0.0中删除。

为什么不req.files存在?

我发现Formidabble易于使用,这是你将如何使用它:

 var formidable = require('formidable'); var fs = require('fs'); module.exports.upload = function (req, res, next) { var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files) { if ('file' in files) { var file = files['file']; // Do something with file module.exports._deleteFiles(files); res.send(200); } else { module.exports._deleteFiles(files); res.send(400); } }); }; module.exports._deleteFiles = function (files) { // Delete temporary files for (var f in files) { fs.unlink(files[f].path); } }; 

最近大部分中间件都是从Express里面取出来的 。

你需要包含中间件来填充req.files – 像connect-multiparty 。

包括var multiparty = require('connect-multiparty'); 与您的模块导入,并且在您有一个app ,添加与app.use(multiparty());中间件app.use(multiparty());

确保清理临时文件,并且可能仅将多方作为中间件传递给明确将要上载的路由。