From 7b165e729f9cf0ac40face49ac5ab896f5065077 Mon Sep 17 00:00:00 2001 From: anlyyao Date: Wed, 9 Sep 2026 19:43:52 +0800 Subject: [PATCH] fix(upload): fix real upload progress not reported when useMockProgress is false --- js/upload/xhr.ts | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/js/upload/xhr.ts b/js/upload/xhr.ts index 5b2e2252ed..211fc95b85 100644 --- a/js/upload/xhr.ts +++ b/js/upload/xhr.ts @@ -108,22 +108,23 @@ export default function xhr({ if (xhr.upload) { xhr.upload.onprogress = (event: ProgressEvent) => { - let realPercent = 0; - if (event.total > 0) { - realPercent = Math.round((event.loaded / event.total) * 100); - } - percent = Math.max(realPercent, percent); - if (percent !== realPercent && innerFiles[0]?.percent !== percent) { - const progressFiles = innerFiles.map((item) => ({ ...item, percent })); - onProgress({ - event, - percent, - file: file || progressFiles[0], - files: progressFiles, - type: 'real', - XMLHttpRequest: xhr, - }); - } + const realPercent = event.total > 0 ? Math.round((event.loaded / event.total) * 100) : 0; + + if (realPercent <= percent) return; + percent = realPercent; + // 同步真实进度到文件对象,确保进度展示和回调数据一致 + innerFiles.forEach((item) => { + item.percent = percent; + }); + const progressFiles = innerFiles.map((item) => ({ ...item, percent })); + onProgress({ + event, + percent, + file: file || progressFiles[0], + files: progressFiles, + type: 'real', + XMLHttpRequest: xhr, + }); }; }