Express - Multiparty / Formidable无法解析Ubuntu上大于100kb的文件。根本没有调用Parse的回调

时间:2015-06-09 17:44:54

标签: ubuntu file-upload express formidable

var express = require('express');
var bodyParser = require('body-parser');
var multiparty = require('multiparty');
var formidable = require('formidable');
var app = express();
...
app.use(bodyParser.raw({limit: 1024 * 1024 * 20}));
app.use(bodyParser.text({limit: 1024 * 1024 * 20}));
app.use(bodyParser.json({limit: 1024 * 1024 * 20}));
app.use(bodyParser.urlencoded({ limit: 1024 * 1024 * 20, extended: false }));
...
...

app.put('/fileupload', function(req, res, next){
    console.log('FILE UPLOAD REQUEST');

    var form = new formidable.IncomingForm();
  //var form = new multiparty.Form();
    form.parse(req, function(err, fields, files){
        var file = files.file; 
      //var file = files.file[0]


      /*... Logic to save file to disk...*/
        ...
        console.log('Received new file');
    });
});

此代码能够将文件写入大小小于70-80kb的磁盘。但是,当size更大时,不会调用form.parse的回调函数(!),并且控制台中没有日志。没有错误。

在我的个人计算机(OS X)上,我可以使用来自localhost的PUT请求编写大文件。当服务器是运行Ubuntu 14.04的远程计算机时,会出现此问题。

在此问题出现之前,我收到了Ubuntu服务器中的“Request Entity Too Large”错误。将nginx配置为20Mb后,错误停止。各种bodyParsers的20Mb限制只是为了表明我尝试了任何配置。我注释掉的多方代码也是如此。 Formidable和Multiparty都不会解析这些文件。

这里发生了什么?如何解析大于〜80kb的文件?

1 个答案:

答案 0 :(得分:1)

我不知道为什么会这样,但我能够使用Busboy而不是Multiparty或Formidable来传输更大尺寸的文件