Files
REVOXELSEG_DICOM/工程分析/实现方案-2026-05-21-00-05-04.md

58 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 实现方案-2026-05-21-00-05-04
## 实现方案文档路径
`工程分析/实现方案-2026-05-21-00-05-04.md`
## 修改目标
- 项目库导入 DICOM/STL 时显示上传进度、文件数量和体积。
- 将项目资产导入从 base64 JSON 改为 multipart 表单上传,降低浏览器内存占用。
- 后端接收普通文件和压缩包,并在服务端展开 ZIP/TAR/TAR.GZ/TGZ/GZ。
- 导入完成后继续刷新项目状态、清理缓存、保留覆盖确认逻辑。
- 对 3D 模型导入崩溃原因给出技术修复:避免 `Promise.all(fileToBase64)` 和巨型 JSON body。
## 涉及路径
- `WebSite/src/lib/api.ts`
- `WebSite/src/components/ProjectLibrary.tsx`
- `WebSite/server.ts`
- `WebSite/package.json`
- `WebSite/package-lock.json`
- `工程分析/经验记录.md`
## 技术路线
1. 引入 `multer` 接收 multipart 文件,使用内存上传缓冲后统一写入项目资产目录。
2. 引入 `adm-zip` 解压 ZIPTAR/TAR.GZ/TGZ 使用 Node `zlib` 与简单 tar header 解析;单文件 GZ 解压为原文件。
3. 后端新增导入文件展开函数,统一过滤 DICOM/STL 目标扩展名,并防止路径穿越。
4. 前端新增 `uploadProjectAssets`,使用 `XMLHttpRequest.upload.onprogress` 返回上传百分比。
5. 项目库增加导入进度状态和紧凑进度条,上传完成后显示服务器解析/解压阶段。
6. 文件选择器 accept 增加 `.zip,.tar,.tar.gz,.tgz,.gz`
## 执行步骤
1. 写入需求、实现、测试方案。
2. 安装 multipart 和 zip 解析依赖。
3. 修改后端导入接口,兼容新的 multipart 上传。
4. 修改前端 API 封装和项目库导入 UI。
5. 执行 `npm run lint``npm run build`
6. 验证健康检查、首页响应和示例项目状态。
7. 追加经验记录,提交推送 Gitea重新部署服务。
## 兼容性与回滚方案
- 若 multipart 上传出现问题,可临时保留 JSON body 解析分支作为兼容回退。
- 若压缩包解析失败,应返回明确错误,不写入半成品项目状态。
- 如新增依赖不可用,可回退为仅支持普通文件和 TAR.GZZIP 支持后续补齐。
## 预计文件变更
- 前端 API 1 个、项目库组件 1 个、后端服务 1 个、依赖清单 2 个、工程分析文档 4 个。
## 提交与部署策略
- 只暂存本次相关代码和工程分析文档。
- commit message 包含 `2026-05-21-00-05-04` 与“导入进度与压缩包支持”。
- 重新构建并使用 `tmux` 会话 `revoxelseg-dicom` 运行 4000 服务。