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()