Files
Head_CT_Morph/工程分析/实现方案-2026-05-03-23-22-10.md

2.3 KiB
Raw Permalink Blame History

实现方案

开始时间2026-05-03-23-22-10

本次方案路径

工程分析/实现方案-2026-05-03-23-22-10.md

实现目标

修复 DICOM 阅览切片/显示模式切换导致后端连接重置的问题,并降低 ZIP 下载误触发和 HTTP 文件加载警告。

涉及文件

  • web_backend.py
  • WebSite/src/App.tsx
  • 工程分析/经验记录.md

执行步骤

  1. 后端增加 DICOM 体数据缓存:
    • 增加 DICOM_VOLUME_CACHE 和锁。
    • 基于 DICOM 目录路径、文件数量、最新修改时间生成签名。
    • /api/library/reformat-preview 复用缓存体数据,避免每次切片/窗位变化都重新读取完整 DICOM。
    • 控制缓存规模,避免多个大体数据长期驻留。
  2. 后端下载容错:
    • send_file 捕获 BrokenPipeErrorConnectionResetErrorConnectionAbortedError,避免客户端中断下载时污染日志或影响服务。
  3. 前端 DICOM 阅览请求防抖:
    • 增加 debouncedViewerSliceIndex
    • 切片滑杆变化后延迟短时间再请求后端,减少快速拖动时的请求数量。
    • 显示模式或平面切换仍可即时重置到中间切片,但实际请求走防抖后的切片索引。
  4. 前端 ZIP 下载防重复:
    • 增加已下载 ZIP job id 记录,确保同一个 ZIP job 自动下载只触发一次。
  5. 前端 ZIP 下载方式调整:
    • 对后端文件路径优先使用 fetch 获取 blob再使用本地 blob: URL 触发下载。
    • 如 blob 下载失败,回退到原有 /api/file URL 方式,并提示用户。
  6. 执行测试方案。
  7. 更新 工程分析/经验记录.md
  8. 提交并推送 Giteacommit 信息使用 2026-05-03-23-22-10 修复阅览切换和下载触发
  9. 重新部署到 http://192.168.3.11:3005/

回滚思路

若缓存或 blob 下载出现问题,可回滚本次 web_backend.pyWebSite/src/App.tsx 修改,恢复直接读取体数据和直接 URL 下载方式。

风险控制

  • 体数据缓存只影响阅览预览接口,不影响真实形变输出。
  • 缓存使用目录签名,影像库数据变化后会重新读取。
  • 删除影像库时同步清除 DICOM 文件缓存和体数据缓存。
  • 前端保留下载回退路径,避免 blob 下载失败后无法下载。

人工审核状态

用户已明确本次不需要人工二次确认,直接执行。