2.3 KiB
2.3 KiB
实现方案
开始时间:2026-05-03-23-22-10
本次方案路径
工程分析/实现方案-2026-05-03-23-22-10.md
实现目标
修复 DICOM 阅览切片/显示模式切换导致后端连接重置的问题,并降低 ZIP 下载误触发和 HTTP 文件加载警告。
涉及文件
web_backend.pyWebSite/src/App.tsx工程分析/经验记录.md
执行步骤
- 后端增加 DICOM 体数据缓存:
- 增加
DICOM_VOLUME_CACHE和锁。 - 基于 DICOM 目录路径、文件数量、最新修改时间生成签名。
/api/library/reformat-preview复用缓存体数据,避免每次切片/窗位变化都重新读取完整 DICOM。- 控制缓存规模,避免多个大体数据长期驻留。
- 增加
- 后端下载容错:
send_file捕获BrokenPipeError、ConnectionResetError、ConnectionAbortedError,避免客户端中断下载时污染日志或影响服务。
- 前端 DICOM 阅览请求防抖:
- 增加
debouncedViewerSliceIndex。 - 切片滑杆变化后延迟短时间再请求后端,减少快速拖动时的请求数量。
- 显示模式或平面切换仍可即时重置到中间切片,但实际请求走防抖后的切片索引。
- 增加
- 前端 ZIP 下载防重复:
- 增加已下载 ZIP job id 记录,确保同一个 ZIP job 自动下载只触发一次。
- 前端 ZIP 下载方式调整:
- 对后端文件路径优先使用
fetch获取 blob,再使用本地blob:URL 触发下载。 - 如 blob 下载失败,回退到原有
/api/fileURL 方式,并提示用户。
- 对后端文件路径优先使用
- 执行测试方案。
- 更新
工程分析/经验记录.md。 - 提交并推送 Gitea,commit 信息使用
2026-05-03-23-22-10 修复阅览切换和下载触发。 - 重新部署到
http://192.168.3.11:3005/。
回滚思路
若缓存或 blob 下载出现问题,可回滚本次 web_backend.py 和 WebSite/src/App.tsx 修改,恢复直接读取体数据和直接 URL 下载方式。
风险控制
- 体数据缓存只影响阅览预览接口,不影响真实形变输出。
- 缓存使用目录签名,影像库数据变化后会重新读取。
- 删除影像库时同步清除 DICOM 文件缓存和体数据缓存。
- 前端保留下载回退路径,避免 blob 下载失败后无法下载。
人工审核状态
用户已明确本次不需要人工二次确认,直接执行。