首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有办法限制在dropzone.js中上传块的最大并行进程数?

是否有办法限制在dropzone.js中上传块的最大并行进程数?
EN

Stack Overflow用户
提问于 2021-12-13 18:17:21
回答 2查看 418关注 0票数 1

我们需要能够支持大上传到我们的网站。这就是我们使用Dropzone.js实现分块上传的原因。

它工作得很好,但是当我使用一个非常大的文件时,我可以在Chrome的网络调试视图中看到,所有请求都是在挂起状态下立即启动的,并且浏览器无法跟上。过了一段时间,打开的请求太多了,Chrome开始为一些挂起的请求返回"net::ERR_INSUFFICIENT_RESOURCES“。

以下是Dropzone配置的相关选项:

代码语言:javascript
运行
复制
[...]
  parallelUploads: 1,  // only one file is uploaded at a time
  maxFilesize: 8148, // max individual file size 8 GB
  chunking: true,      // enable chunking
  forceChunking: true, // forces chunking when file.size < chunkSize
  parallelChunkUploads: true, // allows chunks to be uploaded in parallel
  chunkSize: 2*1024*1024,  // chunk size 2MB
  retryChunks: true,   // retry chunks on failure
  retryChunksLimit: 3
[...]

以下是上传大型文件时来自铬控制台的数百个insufficient_resources错误之一:

代码语言:javascript
运行
复制
dropzone.js:9622 POST http://localhost:44802/AuthenticatedFolder/65fc862e-4cb1-41b0-a39c-f6a41ea5e64d/DoChunkedUpload/A8BB25EA676977DC6F064AEEE636E388FCF5E513 net::ERR_INSUFFICIENT_RESOURCES
submitRequest @ dropzone.js:9622
_uploadData @ dropzone.js:9406
handleNextChunk @ dropzone.js:9218
(anonymous) @ dropzone.js:9248
(anonymous) @ dropzone.js:9423
transformFile @ dropzone.js:7545
_loop @ dropzone.js:9419
_transformFiles @ dropzone.js:9429
uploadFiles @ dropzone.js:9171
processFiles @ dropzone.js:9078
processFile @ dropzone.js:9051
processQueue @ dropzone.js:9042
(anonymous) @ dropzone.js:8743
setTimeout (async)
enqueueFile @ dropzone.js:8742
(anonymous) @ dropzone.js:8705
accept @ dropzone.js:7407
accept @ dropzone.js:8669
addFile @ dropzone.js:8695
(anonymous) @ dropzone.js:8571
_addFilesFromItems @ dropzone.js:8595
drop @ dropzone.js:8510
drop @ dropzone.js:8225

我使用的是最新版本5版本的dropzone(5.9.3)。

是否有办法限制并行运行请求的数量?如果不是,这将是对选项的一个很好的补充。作为解决办法,我已经禁用了parallelChunkUploads。这是可行的,但当然它也减慢了上传速度。

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

发布于 2022-05-30 09:36:38

我们在工作中的应用程序中也有同样的问题。这里有一个合并请求,请求/53提供了一个解决方案。我已经询问了它的状态,但是合并请求现在已经很老了。然而,这个解决方案似乎很容易实现,我们目前的计划是复制Dropzone源代码,然后自己动手。这显然是不理想的,因为我们将依赖本地副本的任何版本,但这可能是值得的,直到Dropzone决定自己解决它。我会随时通知你

票数 0
EN

Stack Overflow用户

发布于 2022-05-30 13:17:37

对我的案子起作用的一个解决办法是:

代码语言:javascript
运行
复制
// Wrapper for upload process to prevent "Not enough resource error"
const oldFunction = fileUploader.submitRequest;
let inProgress = 0;
fileUploader.submitRequest = function(xhr, formData, files){
    runQueue(oldFunction,this,xhr, formData, files)
}
function runQueue(uploadDataFunction,scope,xhr, formData, files){
    if(inProgress <= 50){
        inProgress++;
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4) {
                inProgress--;
            }
        }
        uploadDataFunction.call(scope,xhr, formData, files);
    }else{
        setTimeout(function(){runQueue(uploadDataFunction,scope,xhr, formData, files)},100);
    }
}

我重写了负责处理单个请求的函数。队列50并行进程(据我所知,Chrome最多并行处理2个进程),以便在超时后重新检查缓冲区和所有其他进程,如果队列中的进程少于50个,则添加它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70339205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档