From 1a0429dfb696b1fa0d24a015fce5b4e745b5cf38 Mon Sep 17 00:00:00 2001 From: kiki1373639299 Date: Mon, 17 Nov 2025 10:09:04 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=8F=8C=E5=88=97=E5=B8=83?= =?UTF-8?q?=E5=B1=80=E4=BC=98=E5=8C=96=20=E4=BB=A5=E5=8F=8A=20=E5=88=86?= =?UTF-8?q?=E7=89=87=E4=B8=8A=E4=BC=A0=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: kiki1373639299 # message auto-generated for no-merge-commit merge: !16 merge upload-fix into dev feat: 双列布局优化 以及 分片上传功能优化 Created-by: kiki1373639299 Commit-by: kiki1373639299 Merged-by: Charles_7c Description: ## PR 类型 - [X] 新 feature - [ ] Bug 修复 - [ ] 功能增强 - [ ] 文档变更 - [ ] 代码样式变更 - [ ] 重构 - [ ] 性能改进 - [ ] 单元测试 - [ ] CI/CD - [ ] 其他 ## PR 目的 ## 解决方案 ## PR 测试 ## Changelog | 模块 | Changelog | Related issues | |-----|-----------| -------------- | | | | | ## 其他信息 ## 提交前确认 - [X] PR 代码经过了完整测试,并且通过了代码规范检查 - [ ] 已经完整填写 Changelog,并链接到了相关 issues - [X] PR 代码将要提交到 dev 分支 See merge request: continew/continew-admin-ui!16 --- src/hooks/modules/useMultipartUploader.ts | 26 +++++++++++++++++++---- src/layout/LayoutColumns.vue | 2 +- src/utils/md5-worker.ts | 2 +- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/hooks/modules/useMultipartUploader.ts b/src/hooks/modules/useMultipartUploader.ts index 8763ca8..132da67 100644 --- a/src/hooks/modules/useMultipartUploader.ts +++ b/src/hooks/modules/useMultipartUploader.ts @@ -100,7 +100,7 @@ export function useMultipartUploader(props: { if (typeof Worker !== 'undefined' && !md5Worker) { // eslint-disable-next-line no-console console.log('[Hooks] 初始化MD5 Worker...') - md5Worker = new Worker('/src/utils/md5-worker.ts', { type: 'module' }) + md5Worker = new Worker(new URL('../../utils/md5-worker.ts', import.meta.url), { type: 'module' }) md5Worker.onmessage = function (e) { const { type, taskId, md5, error } = e.data @@ -141,9 +141,27 @@ export function useMultipartUploader(props: { totalTime: 0, } - // 根据文件大小动态调整分块和分片大小 - const blockSize = file.size > 200 * 1024 * 1024 ? 50 * 1024 * 1024 : 25 * 1024 * 1024 // 50MB或25MB块 - const chunkSize = file.size > 100 * 1024 * 1024 ? 10 * 1024 * 1024 : 2 * 1024 * 1024 // 10MB或2MB分片 + // 根据文件大小动态调整分块和分片大小(优化:使用更小的分片以降低内存占用) + let blockSize: number + let chunkSize: number + + if (file.size > 500 * 1024 * 1024) { + // 超大文件(> 500MB) + blockSize = 50 * 1024 * 1024 // 50MB块 + chunkSize = 5 * 1024 * 1024 // 5MB分片 + } else if (file.size > 100 * 1024 * 1024) { + // 大文件(100MB - 500MB) + blockSize = 30 * 1024 * 1024 // 30MB块 + chunkSize = 3 * 1024 * 1024 // 3MB分片 + } else if (file.size > 10 * 1024 * 1024) { + // 中等文件(10MB - 100MB) + blockSize = 10 * 1024 * 1024 // 10MB块 + chunkSize = 1 * 1024 * 1024 // 1MB分片 + } else { + // 小文件(< 10MB) + blockSize = 5 * 1024 * 1024 // 5MB块 + chunkSize = 512 * 1024 // 512KB分片 + } // eslint-disable-next-line no-console console.log(`[Hooks] 发送文件到Worker: ${file.name}, 大小: ${(file.size / 1024 / 1024).toFixed(2)}MB, 块大小: ${(blockSize / 1024 / 1024).toFixed(2)}MB, 分片大小: ${(chunkSize / 1024 / 1024).toFixed(2)}MB`) diff --git a/src/layout/LayoutColumns.vue b/src/layout/LayoutColumns.vue index 5435a09..4123a3b 100644 --- a/src/layout/LayoutColumns.vue +++ b/src/layout/LayoutColumns.vue @@ -5,7 +5,7 @@ -
+
{{ appStore.getTitle() }} diff --git a/src/utils/md5-worker.ts b/src/utils/md5-worker.ts index 0309f5a..22afbb8 100644 --- a/src/utils/md5-worker.ts +++ b/src/utils/md5-worker.ts @@ -111,7 +111,7 @@ function calculateFileMd5Optimized(file: File, taskId: string, blockSize: number const finalSpark = new SparkMD5.ArrayBuffer() blockHashes.forEach((hash) => { const hashBuffer = new TextEncoder().encode(hash) - finalSpark.append(hashBuffer) + finalSpark.append(hashBuffer.buffer.slice(hashBuffer.byteOffset, hashBuffer.byteOffset + hashBuffer.byteLength)) }) const finalMd5 = finalSpark.end()