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

我试图得到一个简单的文件上传机制的工作与快车4.0,但我不断收到undefinedreq.filesapp.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

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');
        });
    });
});
猴子村村2020/03/23 10:33:02

express-fileupload 看起来是当今唯一仍然有效的中间件。

在相同的示例中,multerconnect-multiparty给出了req.filereq.files的未定义值,但是express-fileupload可以工作。

And there are a lot of questions and issues raised about the empty value of req.file/req.files.

番长西里神无2020/03/23 10:33:02

body-parser模块仅处理JSON和urlencoded表单提交,而不是多部分提交(如果您正在上传文件,情况就是如此)。

对于multipart,您需要使用诸如connect-busboymulterconnect-multiparty(multiparty / formidable是Express BodyParser中间件最初使用的东西)之类的东西。同样是FWIW,我正在名为busboy的busboy上的更高层次上工作reformed它带有Express中间件,也可以单独使用。

Itachi2020/03/23 10:33:02

请使用下面的代码

app.use(fileUpload());
2020/03/23 10:33:02

这是我在谷歌上搜索的内容:

var fileupload = require("express-fileupload");
app.use(fileupload());

这是上传的非常简单的机制

app.post("/upload", function(req, res)
{
    var file;

    if(!req.files)
    {
        res.send("File was not found");
        return;
    }

    file = req.files.FormFieldName;  // here is the field name of the form

    res.send("File Uploaded");


});