2.5 KiB
2.5 KiB
实现方案-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.tsWebSite/src/components/ProjectLibrary.tsxWebSite/server.tsWebSite/package.jsonWebSite/package-lock.json工程分析/经验记录.md
技术路线
- 引入
multer接收 multipart 文件,使用内存上传缓冲后统一写入项目资产目录。 - 引入
adm-zip解压 ZIP;TAR/TAR.GZ/TGZ 使用 Nodezlib与简单 tar header 解析;单文件 GZ 解压为原文件。 - 后端新增导入文件展开函数,统一过滤 DICOM/STL 目标扩展名,并防止路径穿越。
- 前端新增
uploadProjectAssets,使用XMLHttpRequest.upload.onprogress返回上传百分比。 - 项目库增加导入进度状态和紧凑进度条,上传完成后显示服务器解析/解压阶段。
- 文件选择器 accept 增加
.zip,.tar,.tar.gz,.tgz,.gz。
执行步骤
- 写入需求、实现、测试方案。
- 安装 multipart 和 zip 解析依赖。
- 修改后端导入接口,兼容新的 multipart 上传。
- 修改前端 API 封装和项目库导入 UI。
- 执行
npm run lint、npm run build。 - 验证健康检查、首页响应和示例项目状态。
- 追加经验记录,提交推送 Gitea,重新部署服务。
兼容性与回滚方案
- 若 multipart 上传出现问题,可临时保留 JSON body 解析分支作为兼容回退。
- 若压缩包解析失败,应返回明确错误,不写入半成品项目状态。
- 如新增依赖不可用,可回退为仅支持普通文件和 TAR.GZ,ZIP 支持后续补齐。
预计文件变更
- 前端 API 1 个、项目库组件 1 个、后端服务 1 个、依赖清单 2 个、工程分析文档 4 个。
提交与部署策略
- 只暂存本次相关代码和工程分析文档。
- commit message 包含
2026-05-21-00-05-04与“导入进度与压缩包支持”。 - 重新构建并使用
tmux会话revoxelseg-dicom运行 4000 服务。