我试图得到一个简单的文件上传机制的工作与快车4.0,但我不断收到undefined对req.files在app.post体内。以下是相关代码:
undefined
req.files
app.post
var bodyParser = require('body-parser'); var methodOverride = require('method-override'); //... app.use(bodyParser({ uploadDir: path.join(__dirname, 'files'), keepExtensions: true })); app.use(methodOverride()); //... app.post('/fileupload', function (req, res) { console.log(req.files); res.send('ok'); });
..和随附的帕格代码:
form(name="uploader", action="/fileupload", method="post", enctype="multipart/form-data") input(type="file", name="file", id="file") input(type="submit", value="Upload")
解决方案 由于以下mscdex的响应,我已切换为使用busboy而不是bodyParser:
busboy
bodyParser
var fs = require('fs'); var busboy = require('connect-busboy'); //... app.use(busboy()); //... app.post('/fileupload', function(req, res) { var fstream; req.pipe(req.busboy); req.busboy.on('file', function (fieldname, file, filename) { console.log("Uploading: " + filename); fstream = fs.createWriteStream(__dirname + '/files/' + filename); file.pipe(fstream); fstream.on('close', function () { res.redirect('back'); }); }); });
该body-parser模块仅处理JSON和urlencoded表单提交,而不是多部分提交(如果您要上传文件,情况就是如此)。
body-parser
对于multipart,您需要使用诸如connect-busboy或multer或connect- multiparty(multiparty / formidable是Express BodyParser中间件中最初使用的东西)之类的东西。同样是FWIW,我正在名为busboy的busboy上的更高层次上工作reformed。它带有Express中间件,也可以单独使用。
connect-busboy
multer
connect- multiparty
reformed