refactor: 双列布局优化 以及 分片上传功能优化

Co-authored-by: kiki1373639299<zkai0106@163.com>



# 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!在提交之前,请务必确保您 PR 的代码经过了完整测试,并且通过了代码规范检查。
-->

<!-- 在 [] 中输入 x 来勾选) -->

## PR 类型

<!-- 您的 PR 引入了哪种类型的变更? -->
<!-- 只支持选择一种类型,如果有多种类型,可以在更新日志中增加 “类型” 列。 -->

- [X] 新 feature
- [ ] Bug 修复
- [ ] 功能增强
- [ ] 文档变更
- [ ] 代码样式变更
- [ ] 重构
- [ ] 性能改进
- [ ] 单元测试
- [ ] CI/CD
- [ ] 其他

## PR 目的

<!-- 描述一下您的 PR 解决了什么问题。如果可以,请链接到相关 issues。 -->

## 解决方案

<!-- 详细描述您是如何解决的问题 -->

## PR 测试

<!-- 如果可以,请为您的 PR 添加或更新单元测试。 -->
<!-- 请描述一下您是如何测试 PR 的。例如:创建/更新单元测试或添加相关的截图。 -->

## Changelog

| 模块  | Changelog | Related issues |
|-----|-----------| -------------- |
|     |           |                |

<!-- 如果有多种类型的变更,可以在变更日志表中增加 “类型” 列,该列的值与上方 “PR 类型” 相同。 -->
<!-- Related issues 格式为 Closes #<issue号>,或者 Fixes #<issue号>,或者 Resolves #<issue号>。 -->

## 其他信息

<!-- 请描述一下还有哪些注意事项。例如:如果引入了一个不向下兼容的变更,请描述其影响。 -->

## 提交前确认

- [X] PR 代码经过了完整测试,并且通过了代码规范检查
- [ ] 已经完整填写 Changelog,并链接到了相关 issues
- [X] PR 代码将要提交到 dev 分支

See merge request: continew/continew-admin-ui!16
This commit is contained in:
kiki1373639299
2025-11-17 10:09:04 +08:00
committed by Charles_7c
parent 7e2c2ba647
commit 1a0429dfb6
3 changed files with 24 additions and 6 deletions

View File

@@ -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`)

View File

@@ -5,7 +5,7 @@
<OneLevelMenu :menus="oneLevelMenus" @menu-click="handleMenuItemClickByItem"></OneLevelMenu>
<!-- 左侧二级菜单区域 -->
<div class="layout-columns__right-menu" :class="{ collapse: appStore.menuCollapse }">
<div v-if="twoLevelMenus.length > 0" class="layout-columns__right-menu" :class="{ collapse: appStore.menuCollapse }">
<!-- 系统标题 -->
<div class="layout-columns__title">
<span v-show="!appStore.menuCollapse" class="system-name gi_line_1">{{ appStore.getTitle() }}</span>

View File

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