[eggjs/egg]multipart如何分开单独限制文件上传大小

2024-08-05 109 views
5

现在的方式都是统一配置 exports.multipart = { fileSize: '10mb', mode: 'stream', };

如何实现不同的router限制不同的size? 尝试stream模式获取length不准,file模式下面file对象根本没有size属性。这个上传很多缺陷啊

回答

9

app.router.get('/xx', app.middleware.multipart({ ... }), controller.xx.xx)

你指的是 ctx.request.files ? 可以自己调用 fs.stats

5

@atian25 这种方式会出现另外一个错误: the multipart request can't be consumed twice config.default.js: exports.multipart = { fileSize: '10mb', mode: 'stream', }; router.js: router.post('/xx', middleware.multipart({ fileSize: '1mb', mode: 'stream' }), controller.xx.xx)

9

你全局那个要配置 ignore 过滤掉对应的

3

@atian25 建议你试一试

7

感谢反馈,这里确实有 2 个问题:

  1. limits 的取值不支持 1kb 这样的配置,只支持 1024 这样,要修复下
  2. limit 事件触发在 await 里面,监听却在下面,@hyj1991 在看怎么修复。
  3. file mode 里面有单独处理了 limit

我们内部一般前面都有个 nginx 挡着,也都尽量用 file 模式,所以没注意到这个问题。

9

@stoneWeb 重新安装依赖再试试