Fix background upload stopping issue
- Remove duplicate uploadprogress event listeners that were conflicting - Simplify progress calculation logic to avoid jumping - Ensure Dropzone continues processing queue after modal close - Fix BackgroundUploadManager event binding to prevent conflicts - Add proper progress synchronization between modal and background views
This commit is contained in:
@@ -94,6 +94,13 @@
|
|||||||
|
|
||||||
// 绑定事件监听
|
// 绑定事件监听
|
||||||
this.bindDropzoneEvents();
|
this.bindDropzoneEvents();
|
||||||
|
|
||||||
|
// 确保Dropzone继续处理上传队列
|
||||||
|
setTimeout(() => {
|
||||||
|
if (dropzone.getQueuedFiles().length > 0) {
|
||||||
|
dropzone.processQueue();
|
||||||
|
}
|
||||||
|
}, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
bindDropzoneEvents() {
|
bindDropzoneEvents() {
|
||||||
@@ -101,15 +108,7 @@
|
|||||||
|
|
||||||
const dz = this.dropzoneInstance;
|
const dz = this.dropzoneInstance;
|
||||||
|
|
||||||
dz.on('uploadprogress', (file, progress, bytesSent, totalBytesSent, totalBytes) => {
|
// 监听成功和错误事件
|
||||||
let chunkInfo = null;
|
|
||||||
if (file.totalChunks > 1) {
|
|
||||||
const currentChunk = (file.upload && file.upload.chunk) || 0;
|
|
||||||
chunkInfo = `${currentChunk + 1}/${file.totalChunks}`;
|
|
||||||
}
|
|
||||||
this.updateProgress(file._dzFileId, progress, chunkInfo);
|
|
||||||
});
|
|
||||||
|
|
||||||
dz.on('success', (file, response) => {
|
dz.on('success', (file, response) => {
|
||||||
this.completeUpload(file._dzFileId);
|
this.completeUpload(file._dzFileId);
|
||||||
});
|
});
|
||||||
@@ -569,6 +568,8 @@
|
|||||||
|
|
||||||
this.on('uploadprogress', function(file, progress, bytesSent, totalBytesSent, totalBytes) {
|
this.on('uploadprogress', function(file, progress, bytesSent, totalBytesSent, totalBytes) {
|
||||||
var fileId = file._dzFileId;
|
var fileId = file._dzFileId;
|
||||||
|
|
||||||
|
// 更新悬浮窗中的进度
|
||||||
var progressEl = document.getElementById('progress-' + fileId);
|
var progressEl = document.getElementById('progress-' + fileId);
|
||||||
var percentEl = document.getElementById('percent-' + fileId);
|
var percentEl = document.getElementById('percent-' + fileId);
|
||||||
var chunksEl = document.getElementById('chunks-' + fileId);
|
var chunksEl = document.getElementById('chunks-' + fileId);
|
||||||
@@ -595,38 +596,10 @@
|
|||||||
percentEl.textContent = Math.round(progress) + '%';
|
percentEl.textContent = Math.round(progress) + '%';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
this.on('uploadprogress', function(file, progress, bytesSent, totalBytesSent, totalBytes) {
|
// 同步到后台管理器
|
||||||
var fileId = file._dzFileId;
|
if (backgroundManager) {
|
||||||
var progressEl = document.getElementById('progress-' + fileId);
|
backgroundManager.updateProgress(fileId, totalProgress, file.totalChunks > 1 ? `${(file.upload.chunk || 0) + 1}/${file.totalChunks}` : null);
|
||||||
var percentEl = document.getElementById('percent-' + fileId);
|
|
||||||
var chunksEl = document.getElementById('chunks-' + fileId);
|
|
||||||
|
|
||||||
file._uploadProgress = progress;
|
|
||||||
|
|
||||||
if (file.totalChunks > 1) {
|
|
||||||
var currentChunk = file.upload.chunk || 0;
|
|
||||||
var chunkProgress = (currentChunk / file.totalChunks) * 100;
|
|
||||||
var currentChunkProgress = (progress / 100) * (100 / file.totalChunks);
|
|
||||||
var totalProgress = chunkProgress + currentChunkProgress;
|
|
||||||
|
|
||||||
if (progressEl) {
|
|
||||||
progressEl.style.width = Math.min(totalProgress, 100) + '%';
|
|
||||||
}
|
|
||||||
if (percentEl) {
|
|
||||||
percentEl.textContent = Math.round(Math.min(totalProgress, 100)) + '%';
|
|
||||||
}
|
|
||||||
if (chunksEl) {
|
|
||||||
chunksEl.textContent = (currentChunk + 1) + '/' + file.totalChunks;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (progressEl) {
|
|
||||||
progressEl.style.width = progress + '%';
|
|
||||||
}
|
|
||||||
if (percentEl) {
|
|
||||||
percentEl.textContent = Math.round(progress) + '%';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user