【问题标题】:Dynamically limit upload file size in Express (node.js)在 Express (node.js) 中动态限制上传文件大小
【发布时间】:2012-05-21 09:48:05
【问题描述】:

我正在开发一个简单的应用程序,允许用户上传他们的内容。我想限制 Express 接受的文件大小。我知道我可以使用

app.use(express.limit('2mb'));

但我想动态更改限制。某些用户会有更高的限制。

最好的解决方案是首先检查content-length 标头,然后如果文件大小低于限制,则开始解析上传,但 Express 会自动将文件上传保存到磁盘(/tmp 目录)。因此,如果有人发送 1GB 文件,即使我不想允许,该文件也会被解析并保存到磁盘。

提前致谢!

【问题讨论】:

    标签: node.js upload express


    【解决方案1】:

    在添加bodyParser()之前添加limit(),例如:

    app.use(express.limit(100000));
    app.use(express.bodyParser({uploadDir: '/tmp', keepExtensions:true}));
    

    这样上传的文件太大时不会保存在/tmp中。

    【讨论】:

    • express.limit() 已被弃用。如果我使用它,我会收到此错误:“错误:大多数中间件(如限制)不再与 Express 捆绑在一起,必须单独安装。请参阅github.com/senchalabs/connect#middleware。”
    【解决方案2】:

    Express 基本上使用 connect 的 limit() 中间件。

    因此,您可能想编写自己的中间件,而不是使用默认的 limit()。

    你可以从https://github.com/senchalabs/connect/blob/2.24.2/lib/middleware/limit.js#L40这里查看limit()的源代码开始

    【讨论】:

    • 嗯.. 即使我设置app.use(express.limit(1))(1 字节)上传的文件被刷新到磁盘。我认为如果content-length 大于1 字节,limit 将破坏请求。编辑:好的。一切都按预期工作。 limit 中间件必须放在 bodyParser() 之前
    • @250r : 链接已失效。
    猜你喜欢
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 2011-01-29
    • 2017-03-09
    • 2011-01-13
    相关资源
    最近更新 更多