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

2.5 KiB
Raw Blame History

实现方案-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 lintnpm 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 服务。