如何在 express.js 中限制上传文件的大小
Posted
技术标签:
【中文标题】如何在 express.js 中限制上传文件的大小【英文标题】:How to limit upload file size in express.js 【发布时间】:2012-11-02 16:17:02 【问题描述】:我收到了这个错误提示
error:request entity too large
上传30MB左右的视频时,
这里是设置代码
app.use(express.bodyParser(
uploadDir:'./Temp',
maxFieldsSize:'2 * 1024 * 1024 * 1024 ',
));
不确定如何设置 maxFieldsSize 属性,需要一些帮助!!!
【问题讨论】:
【参考方案1】:Express使用connect中间件,可以通过以下方式指定文件上传大小
app.use(express.limit('4M'));
Connect Limit middleware
【讨论】:
还要确保你把它放在 bodyParser() 上面,祝你编码愉快! 但不表达使用节点强大?并且 express 文档说“bodyParser() 中间件在内部利用了 node-formidable 模块,并接受相同的选项。” 我不知道旧版本,但从 v3.01(当前)开始,上传看起来好像是直接通过连接处理的 limit('4mb') 似乎是正确的语法(至少现在是这样)。 注意:此答案不再有效,仅适用于不再可用的 Express 版本。【参考方案2】:app.use(express.limit('4mb'));
但你必须确保在下面添加这一行,
app.use(express.bodyParser());
或
app.use(express.json());
app.use(express.urlencoded());
取决于您使用的版本。
【讨论】:
由于 nodejs 取出了限制中间件,因此答案在 2016 年不再有效 ^^ 他说什么【参考方案3】:// Comment sart
// app.use(express.bodyParser(
// uploadDir:'./Temp',
// maxFieldsSize:'2 * 1024 * 1024 * 1024 ',
// ));
// Add this code for maximun 150mb
app.use(bodyParser.json(limit: '150mb'));
app.use(bodyParser.urlencoded( // to support URL-encoded bodies
limit: '150mb',
extended: true
));
// I did it Okay. Goood luck
【讨论】:
【参考方案4】:我正在使用 Express 4。我尝试了许多 app.use() 语句,包括 this thread 中列出的未弃用的语句,但它们都不起作用。
结果我只需要在 index.js 中添加一行来更改 Formidable 模块中的 maxFileSize 选项:
// create an incoming form object
var form = new formidable.IncomingForm();
// ADD THIS LINE to increase file size limit to 10 GB; default is 200 MB
form.maxFileSize = 10 * 1024 * 1024 * 1024;
来源:here的评论。
【讨论】:
【参考方案5】:var upload = multer( storage : storage2, limits: fileSize: 1024 * 1024 * 50 );
使用 nodejs 中的 multer 增加文件上传大小的正确格式
【讨论】:
【参考方案6】:2020 Express 使用 body-parser urlencoded 函数来控制限制。 http://expressjs.com/en/4x/api.html#express.urlencoded
这些是 node_modules>body-parser>lib>types>urlencoded.js 中的默认设置 https://www.npmjs.com/package/body-parser
var extended = opts.extended !== false
var inflate = opts.inflate !== false
var limit = typeof opts.limit !== 'number'
? bytes.parse(opts.limit || '100kb')
: opts.limit
var type = opts.type || 'application/x-www-form-urlencoded'
var verify = opts.verify || false
您可以在此处看到限制的默认设置为 100kb。 所以为了提高你可以使用
app.use(express.urlencoded( extended: false, limit: '2gb' ));
这里是通过 NPM 包字节可用的文件类型选项(由 bodyparser 使用) https://www.npmjs.com/package/bytes
"b" for bytes
"kb" for kilobytes
"mb" for megabytes
"gb" for gigabytes
"tb" for terabytes
"pb" for petabytes
我确定这有点矫枉过正,但我希望这对下一个人有所帮助。
【讨论】:
以上是关于如何在 express.js 中限制上传文件的大小的主要内容,如果未能解决你的问题,请参考以下文章
如何限制用户通过 jquery 在 Telerik 上传中上传零大小的文件?