Dropzone.js开启multipleUploads与parallelUploads时上传行为异常求助
问题解决:Dropzone.js 拖拽多文件夹时请求拆分的问题
你遇到的问题是因为Dropzone默认的自动处理逻辑会在文件分批添加时触发上传,加上缺少几个关键配置导致的。以下是具体解决方案:
关键配置补充
需要在Dropzone初始化时添加以下配置项,并调整上传触发逻辑:
let myDropzone = new Dropzone("div#dropTarget", { url: "process.php", uploadMultiple: true, createImageThumbnails: false, paramName: "files", parallelUploads: 1000, autoQueue: false, // 禁止文件自动加入上传队列 maxFiles: 1000, // 覆盖默认最大文件数限制(默认256) autoProcessQueue: false // 禁止自动触发上传 }); // 手动控制上传时机:所有文件添加完成后统一发送请求 let addedFilesCount = 0; let totalExpectedFiles = 0; // 监听拖拽进入事件,获取预期上传的总文件数 myDropzone.on("dragenter", function(event) { if (event.dataTransfer.items) { totalExpectedFiles = Array.from(event.dataTransfer.items) .filter(item => item.kind === "file").length; } }); // 每个文件添加完成后计数,达到总数时触发批量上传 myDropzone.on("addedfile", function() { addedFilesCount++; if (addedFilesCount === totalExpectedFiles) { myDropzone.processQueue(); // 重置计数,方便下次拖拽操作 addedFilesCount = 0; totalExpectedFiles = 0; } });
配置逻辑说明
autoQueue: false:默认情况下Dropzone会在单个文件添加后自动入队,这会导致文件夹内的文件被分批处理,关闭后可手动控制队列内容。maxFiles: 1000:Dropzone默认仅允许最多256个文件上传,覆盖这个值避免因数量限制导致的文件拆分。autoProcessQueue: false:禁止自动触发上传,确保所有文件都加入队列后再统一发送请求。- 手动计数触发:通过监听拖拽事件获取总文件数,等所有文件都添加完成后调用
processQueue(),实现一次性上传。
PHP端额外配置检查
除了max_file_uploads = 1000,还需确保以下php.ini配置满足需求:
upload_max_filesize = 10M(单个文件最大允许大小,根据实际文件调整)post_max_size = 50M(POST请求总大小限制,需大于所有上传文件的总大小)
修改后重启PHP服务使配置生效。
验证效果
拖拽4个各含10个文件的文件夹后,Dropzone会等待所有40个文件加入队列,仅发送一次请求到process.php,此时count($_FILES['files']['name'])会返回40。
内容的提问来源于stack exchange,提问作者ad_on_is
相关产品推荐
相关产品推荐

