-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
新人想请教egg-multipart问题:使用File 模式处理文件上传 #4820
Comments
和 #4808 这个应该是同一个问题,需要看下 |
我排查发现是co-busboy的parse有问题 // node_modules/egg-multipart/app/extend/context.js
const parse = require('co-busboy');
multipart(options) {
// multipart/form-data
if (!this.is('multipart')) {
this.throw(400, 'Content-Type must be multipart/*');
}
if (this[HAS_CONSUMED]) throw new TypeError('the multipart request can\'t be consumed twice');
this[HAS_CONSUMED] = true;
const parseOptions = Object.assign({}, this.app.config.multipartParseOptions);
options = options || {};
if (typeof options.autoFields === 'boolean') parseOptions.autoFields = options.autoFields;
if (options.defCharset) parseOptions.defCharset = options.defCharset;
if (options.checkFile) parseOptions.checkFile = options.checkFile;
// merge and create a new limits object
if (options.limits) {
const limits = options.limits;
for (const key in limits) {
if (/^\w+Size$/.test(key)) {
limits[key] = bytes(limits[key]);
}
}
parseOptions.limits = Object.assign({}, parseOptions.limits, limits);
}
return parse(this, parseOptions);
}, 我看了co-busboy的parse使用,文档推荐使用autoFields: true |
我还看到一个问题,就是老版本的busboy在处理数据流的时候,会出现先 close 再 finish 的BUG // node_modules/co-busboy/index.js
var Busboy = require('busboy') 这里的包依赖,我觉得试一下升级到最新的包,看一下数据流的处理。 |
切换到 node-v12.x 或者 node-v14.x 再试试,之前 co-busboy 有个 close 和 finish 先后时序问题导致的文件 pending:cojs/busboy#41 |
cengzj@0201206761-NB MINGW64 /e/demo |
@zenblofe 这两个上传文件 pending 的问题稍后我会看下的 |
我这边也遇到了一样的问题,然后也是调试到了co-busboy里面,确实是有问题。但是我测试了一下把co-busboy升级到1.5.0,问题貌似就没有了,好像是co-busboy修复了这个问题?我这边测试在node14和node16上,使用[email protected],文件上传都是ok的。这边建议egg-multipart把co-busboy的依赖版本调整到1.5.0以上应该就ok了。 |
问题现象:批量上传文件时会出现某几个文件始终处于上传状态,对应的上传请求处于挂起状态。
BUG排查:
导致该问题的原因是egg-multipart的saveRequestFiles()没有生成对应的part文件。
The text was updated successfully, but these errors were encountered: