使用 Express 4.0 上传文件:req.files 未定义

2024-01-02

我试图获得一个与 Express 4.0 一起使用的简单文件上传机制,但我不断得到undefined for req.files in the 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'); 
}); 

..以及随附的 Pug 代码:

form(name="uploader", action="/fileupload", method="post", enctype="multipart/form-data")
    input(type="file", name="file", id="file")
    input(type="submit", value="Upload")

Solution
感谢以下人士的回复mscdex https://stackoverflow.com/users/2050455/mscdex下面,我已改用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');
        });
    });
});

The body-parser https://github.com/expressjs/body-parser模块仅处理 JSON 和 urlencoded 表单提交,而不处理多部分(如果您上传文件,就会出现这种情况)。

对于多部分,您需要使用类似的东西connect-busboy https://github.com/mscdex/connect-busboy or multer https://github.com/expressjs/multer or connect-multiparty https://github.com/andrewrk/connect-multiparty(multiparty/formidable 最初是在express bodyParser 中间件中使用的)。另外FWIW,我正在busboy之上开发一个更高级别的层,称为reformed https://github.com/mscdex/reformed。它带有 Express 中间件,也可以单独使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Express 4.0 上传文件:req.files 未定义 的相关文章

随机推荐