2026-05-21-00-05-04 导入进度与压缩包支持

This commit is contained in:
2026-05-21 00:24:29 +08:00
parent dcd6fe56c7
commit 14c8eb153d
9 changed files with 640 additions and 27 deletions

View File

@@ -0,0 +1,50 @@
# 需求分析-2026-05-21-00-05-04
## 开始时间
2026-05-21-00-05-04
## 原始需求摘要
1. 项目库导入 DICOM 影像、3D 模型时增加进度条。
2. 导入时允许选择 ZIP 或其他常见压缩格式,方便传输批量 DICOM/STL。
3. 导入 3D 模型时出现 Chrome `Render process gone / Out of Memory`,需要定位原因并修复。
## 业务目标
- 让大体量医学影像和 STL 构件导入过程有明确进度反馈。
- 支持用户用压缩包一次性传输多文件,减少文件选择和网络传输压力。
- 避免前端在大文件导入时因 base64 转换和 JSON 请求造成浏览器内存崩溃。
## 输入与输出
- 输入DICOM 文件、STL 文件、ZIP/TAR/TAR.GZ/TGZ/GZ 等压缩文件。
- 输出:项目级 DICOM/STL 上传目录中的解包文件、更新后的项目状态、导入进度条、导入成功/失败反馈。
## 影响范围
- `WebSite/src/components/ProjectLibrary.tsx`:导入入口、进度条、文件选择 accept、导入状态。
- `WebSite/src/lib/api.ts`:新增带上传进度的 multipart 导入 API。
- `WebSite/server.ts`:新增 multipart 文件接收、压缩包展开、导入文件筛选与项目状态更新。
- `WebSite/package.json``WebSite/package-lock.json`:新增 multipart/zip 解析依赖。
- `工程分析/经验记录.md`:记录本次导入链路经验。
## 关键约束
- 上传资产仍必须写入 `WebSite/data/uploads/<projectId>/DICOM|STL`,不能覆盖默认 `Head_CT_DICOM/``Head_CT_ReConstruct/`
- 大文件导入不能再在浏览器中整包 base64 化。
- 压缩包解压必须防止路径穿越,不能写出目标目录。
- 导入后需要清理项目预览缓存,避免继续使用旧 DICOM/STL。
## 风险点
- ZIP 内可能包含多层目录、中文文件名、无扩展 DICOM 文件或无关文件,需要筛选可导入文件。
- TAR.GZ 解包需要处理普通文件、目录和路径安全。
- 上传进度只能覆盖网络上传阶段,服务端解压/解析阶段需要用“处理中”状态承接。
- 大 STL 导入后如果立即按实体精度加载过多预览,仍可能造成前端渲染压力。
## 默认假设
- “其他常见压缩格式”优先支持 `.zip``.tar``.tar.gz``.tgz`,并支持单文件 `.gz`
- DICOM 导入接受 `.dcm``.dicom`,同时保留压缩包中无扩展 DICOM 的识别尝试空间。
- 3D 模型导入当前仍以 STL 为主,压缩包中只提取 `.stl`