2026-05-20-01-38-33 完善NII导出与位姿持久化

This commit is contained in:
2026-05-20 01:56:54 +08:00
parent 19bd706453
commit 7099bfde8d
8 changed files with 1084 additions and 145 deletions

View File

@@ -991,3 +991,57 @@ C. 解决问题方案
D. 后续如何避免问题
调整任何滑条或步进按钮的 step 时,同步检查数值展示、长按步进和手动输入精度,避免控制精度和显示精度不一致。
## 2026-05-20-01-38-33 NIfTI 导出必须与 DICOM 体数据同维同距
A. 具体问题
旧的 NII/NII.GZ 导出生成的是固定 `64x64x64` 演示 Mask用户在 ITK-SNAP 中打开时无法与真实 DICOM 序列对应,表现为尺度、层数和内容都不可信。
B. 产生问题原因
早期导出接口没有读取真实 DICOM Pixel Data、Pixel Spacing 和 slice spacing而是直接写入一个合成球体数据这类演示数据适合验证下载链路但不能用于医学影像工具复核。
C. 解决问题方案
后端新增真实 NIfTI-1 写入链路DICOM 原始影像导出为 `512x512x300` int16 HU volume分割影像导出为同维度 uint8 Label Map并把 spacing 写入 NIfTI header。分割数据复用 STL 构件采样切面、当前位姿变换和扫描线填充逻辑生成,标签值对应构件 `partId`
D. 后续如何避免问题
任何影像导出功能都必须先确认维度、spacing、datatype、vox_offset 和真实数据来源。不能用固定尺寸演示数据替代生产导出;新增导出后至少用脚本读取 NIfTI header并确认体素数和 DICOM 序列一致。
## 2026-05-20-01-38-33 浏览器下载不应依赖 blob:http 临时地址
A. 具体问题
浏览器控制台出现 `blob:http://... was loaded over an insecure connection`,用户误以为导出的 NII.GZ 文件本身或服务部署存在安全错误。
B. 产生问题原因
前端先 `fetch` 后端文件,再用 `URL.createObjectURL(blob)` 生成临时 `blob:http` 地址触发下载;在 HTTP 部署环境下,浏览器会对 blob 来源继承非安全上下文并给出警告。
C. 解决问题方案
将 NIfTI、DICOM 压缩包和多文件导出统一改成后端直链附件下载,由 Express 设置 `Content-Disposition`,前端只创建 `<a href="/api/...">` 触发下载,不再生成 blob URL。
D. 后续如何避免问题
面向大文件、医疗影像和压缩包下载时优先使用后端附件直链。如果必须用 blob应明确浏览器安全提示的影响生产环境仍应考虑 HTTPS但不能把 blob 临时地址当作常规下载路径。
## 2026-05-20-01-38-33 位姿列表需要进入项目状态而不是组件内存
A. 具体问题
用户保存的可视化工具栏位姿在重新进入项目后消失,造成调好的 STL/DICOM 对齐姿态无法继续复核或用于导出。
B. 产生问题原因
旧实现把 `savedPoses` 放在 `ReverseWorkspace` 组件本地 state 中,页面重新加载或重新进入项目时只会恢复默认、俯视、侧视三组临时位姿,没有写回后端项目状态。
C. 解决问题方案
为项目状态新增 `modelPoses` 字段,后端归一化默认位姿并提供 `PATCH /api/projects/:projectId/model-poses`;前端加载项目时读取 `project.modelPoses`,保存或重命名位姿时立即写回后端。
D. 后续如何避免问题
凡是用户明确“保存”的可视化参数都应进入项目级持久状态,不能只存在于组件 state。新增保存类交互时同时设计读取、写入、归一化和刷新后的回显验证。