【问题标题】:Connect Middleware Node.js Max File Size连接中间件 Node.js 最大文件大小
【发布时间】:2025-12-26 04:30:12
【问题描述】:

我有一个基于 node.js 的 FTP 门户。上传超过 100MB 的文件时,出现错误。

这是错误输出:

{"error":{"message":"Request Entity Too Large","stack":"Error: Request         Entity Too Large\n 
at Object.exports.error (/home/ubuntu/sasite-ftp/node_modules/express/node_modules/connect/lib/utils.js:62:13)\n
at limit (/home/ubuntu/sasite-ftp/node_modules/express/node_modules/connect/lib/middleware/limit.js:46:47)\n
at multipart (/home/ubuntu/sasite-ftp/node_modules/express/node_modules/connect/lib/middleware/multipart.js:97:5)\n
at /home/ubuntu/sasite-ftp/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:57:9\n 
at urlencoded (/home/ubuntu/sasite-ftp/node_modules/express/node_modules/connect/lib/middleware/urlencoded.js:52:72)\n 
at /home/ubuntu/sasite-ftp/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:55:7\n 
at json (/home/ubuntu/sasite-ftp/node_modules/express/node_modules/connect/lib/middleware/json.js:46:55)\n at Object.bodyParser [as handle] (/home/ubuntu/sasite-ftp/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:53:5)\n 
at next (/home/ubuntu/sasite-ftp/node_modules/express/node_modules/connect/lib/proto.js:190:15)\n 
at Object.cookieParser [as handle] (/home/ubuntu/sasite-ftp/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js:60:5)","status":413}}

我在第 46 行和第 47 行查看了 connect/lib/middleware/limit.js:

     if (len && len > bytes) return next(utils.error(413));

这似乎与limit.js中的这个函数有关:

module.exports = function limit(bytes){
if ('string' == typeof bytes) bytes = utils.parseBytes(bytes);
if ('number' != typeof bytes) throw new Error('limit() bytes required');
return function limit(req, res, next){
var received = 0
  , len = req.headers['content-length']
    ? parseInt(req.headers['content-length'], 10)
    : null;

如果需要,我可以发布更多代码,但是您可以轻松地在 node_modules/express/node_modules/connect/ 中查找连接代码

如果有人对实际的最大文件大小以及对其有什么限制有任何意见,我们将不胜感激。

编辑:最大文件大小为 100MB,我应该在哪个文件中输入代码以根据以下建议的第一个答案进行更改。

【问题讨论】:

    标签: node.js ftp node.js-connect


    【解决方案1】:

    假设您以一种或另一种方式使用 Connect 多部分中间件,默认的最大上传文件大小为 100MB,定义如下:

    var limit = _limit(options.limit || '100mb');
    

    如果你想设置自己的文件上传限制,multipart中间件有一个limit选项可以设置:

    app.use(connect.multipart({
      limit: '1000mb'
    }));
    

    如果你使用connect.bodyParser(),它也在内部使用多部分中间件,因此可以以相同的方式指定选项:

    app.use(connect.bodyParser({
      limit: '1000mb'
    }));
    

    【讨论】:

    • 请注意bodyParser 已被弃用,将在下一版 Express 中删除,因此不应再使用。
    • 感谢您的回答。在我接受之前,您能帮我解释一下我应该在哪里添加该代码吗?在 node_modules/express/node_modules/connect/middleware/limit.js 文件中?还是别的地方?
    • @paul-mougel 有没有这方面的文档?你知道替代实现是什么吗?
    • 我相信我错了:bodyParser 并没有被弃用,而是使用了被弃用的multipart,所以bodyParser 的行为会在连接 3.0 土地时发生变化。基本上,multipart 将被删除,因此您将不得不使用其他东西,例如强大的或 busboy。请参阅the wiki page for Connect 3.0 了解更多信息。
    【解决方案2】:

    来自 connect-multiparty Express 中间件connect-multipart/index.js

    • 传递的选项与multiparty's 合并 Form对象,允许你配置上传目录, 大小限制等。例如,如果您希望更改上传目录,请执行以下操作。

    所以根据Multiparty Docs

    • maxFieldsSize - 限制所有字段(不是文件)可以分配的内存量(以字节为单位)。如果超过此值,则会发出错误事件。默认大小为 2MB。

    我的工作是:

    var app = express(),
        multipart = require('connect-multiparty');
    
    app.use(multipart({
        maxFieldsSize: '20MB'
    }));
    

    【讨论】:

    • hello @gtrenco 如何处理其中的错误事件?因为它正在进入无限