From a6c40b9fc014e582e6eda9352f56ce1dceea2349 Mon Sep 17 00:00:00 2001 From: Wren Date: Sun, 14 Sep 2025 01:36:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=87=E4=BB=B6=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E8=BF=9B=E5=BA=A6=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E8=B0=83=E6=95=B4=E4=B8=8A=E4=BC=A0=E9=80=9F=E5=BA=A6?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=EF=BC=8C=E7=AE=80=E5=8C=96=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=90=8E=E7=9A=84=E7=8A=B6=E6=80=81=E5=A4=84?= =?UTF-8?q?=E7=90=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/routes/files.upload.tsx | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/app/routes/files.upload.tsx b/app/routes/files.upload.tsx index bf8d78f..cd4da1b 100644 --- a/app/routes/files.upload.tsx +++ b/app/routes/files.upload.tsx @@ -1030,25 +1030,30 @@ export default function FilesUpload() { setUploadStage("uploading"); setUploadProgress(0); - // 计算总大小并开启与旧逻辑一致的模拟进度 + // 计算总大小并开启与旧逻辑一致的模拟进度(按时间推进到 95%) const totalSize = filesForProgress.reduce((sum, f) => sum + (f?.size || 0), 0); - let uploadedSize = 0; const startTime = Date.now(); - let lastUploadedSize = 0; let lastUpdateTime = startTime; + let lastRatio = 0; + const estimatedUploadTime = Math.max( + (totalSize / (1024 * 1024)) / 3 * 1000, // 3MB/s 估算 + 1000 + ); if (uploadProgressIntervalRef.current) { clearInterval(uploadProgressIntervalRef.current); } uploadProgressIntervalRef.current = setInterval(() => { const now = Date.now(); - const elapsed = (now - lastUpdateTime) / 1000; - const speed = elapsed > 0 ? (uploadedSize - lastUploadedSize) / elapsed : 0; // bytes/s - lastUploadedSize = uploadedSize; + const deltaSec = (now - lastUpdateTime) / 1000; + const ratio = Math.min((now - startTime) / estimatedUploadTime, 0.95); + // 计算瞬时速度(基于比例变化) + const deltaRatio = Math.max(ratio - lastRatio, 0); + const bytesPerSec = deltaSec > 0 ? (totalSize * deltaRatio) / deltaSec : 0; + lastRatio = ratio; lastUpdateTime = now; - setUploadSpeed(`${formatFileSize(speed)}/s`); - const progress = Math.min((uploadedSize / Math.max(totalSize, 1)) * 100, 95); - setUploadProgress(parseFloat(progress.toFixed(2))); + setUploadSpeed(`${formatFileSize(bytesPerSec)}/s`); + setUploadProgress(parseFloat((ratio * 100).toFixed(2))); }, 200); // 转二进制 @@ -1073,9 +1078,6 @@ export default function FilesUpload() { if (!uploadResp.result) throw new Error('主文件上传失败'); const documentId = uploadResp.result.id; - // 模拟:主文件完成后将 uploadedSize 直接置为总大小的 95% - uploadedSize = Math.max(totalSize * 0.95, uploadResp.result.file_size || totalSize * 0.5); - // 可选:模板上传 if (templateFiles && templateFiles.length > 0) { const tpl = templateFiles[0]; @@ -1088,8 +1090,6 @@ export default function FilesUpload() { if ('error' in tplResult && tplResult.error) { throw new Error(tplResult.error); } - // 模板算作少量额外上传 - uploadedSize = totalSize * 0.98; } // 完成:清理进度定时器并置满 @@ -1100,7 +1100,7 @@ export default function FilesUpload() { setUploadProgress(100); setUploadSpeed('完成'); - toastService.success('上传成功,已触发处理'); + toastService.success('上传成功'); // 刷新队列 await filterDocuments(reviewType); setUploadStage("processing");