2026-05-20-01-38-33 完善NII导出与位姿持久化
This commit is contained in:
54
工程分析/经验记录.md
54
工程分析/经验记录.md
@@ -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。新增保存类交互时同时设计读取、写入、归一化和刷新后的回显验证。
|
||||
|
||||
Reference in New Issue
Block a user