使用Express(node.js)dynamic限制上传文件大小

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

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

但我想dynamic地改变极限 。 某些用户将有更高的限制。

最好的解决scheme是先检查content-length标题,然后在文件大小低于限制的情况下开始parsing上传,但是Express会自动将file upload到磁盘(/ tmp目录)。 所以如果有人发送1GB的文件,这个文件将被parsing并保存到磁盘,即使我不想这样做。

提前致谢!

Express主要使用连接的限制()中间件。

所以你可能想写你自己的中间件,而不是使用默认的限制()。

您可以先查看limit()的源代码https://github.com/senchalabs/connect/blob/2.24.2/lib/middleware/limit.js#L40

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

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

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