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的文件?