Files
Head_CT_Morph/工程分析/需求分析-2026-05-03-23-22-10.md

2.8 KiB
Raw Permalink Blame History

需求分析

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

原始需求

用户要求严格使用代码编纂工作流,并在最开始确认整体流程。本次需求分析、实现方案、测试方案和执行修改均不需要用户二次人工确认。

需要修复两个问题:

  1. 点击 DICOM 阅览中的切片滚动条时出现与 ZIP 文件相关的浏览器警告:The file at ...head_ct_morph_selected_54ed40feeb63.zip was loaded over an insecure connection. This file should be served over HTTPS.
  2. 切换 DICOM 阅览显示模式时出现请求失败:GET /api/library/reformat-preview ... net::ERR_CONNECTION_RESET

目标

  • DICOM 阅览切片滚动和显示模式切换不再导致后端连接重置。
  • 降低切片滑杆快速拖动时的请求风暴和后端内存压力。
  • ZIP 下载完成后只触发一次下载,避免和其他 UI 操作交织造成误触发。
  • 尽量避免通过直接加载 ZIP URL 的方式触发浏览器 insecure file 警告。

影响范围

  • web_backend.py
    • DICOM 阅览重建预览接口。
    • DICOM 体数据读取和缓存策略。
    • 文件下载响应的连接中断容错。
  • WebSite/src/App.tsx
    • DICOM 阅览请求节流/防抖。
    • ZIP 下载触发逻辑。
    • 已完成 ZIP job 的重复下载保护。
  • 工程分析/经验记录.md

当前定位

  • 后端日志显示 python ../web_backend.py 被系统 Killed,符合快速并发读取整套 DICOM 体数据导致内存压力过大的表现。
  • 当前 /api/library/reformat-preview 每次请求都会调用 load_dicom_volume(item["dicomPath"]),快速拖动滑杆或切换窗位会并发生成多个请求。
  • 前端阅览 effect 在 viewerSliceIndexviewerWindow 等状态变化时立即发请求AbortController 只中断浏览器端等待,不能中止后端已经开始的体数据读取。
  • ZIP 下载目前通过临时 <a> 直接访问后端 /api/file?path=...zip,浏览器可能显示 HTTP 文件下载安全警告;同时需要防止同一个 ZIP job 多次自动触发下载。

约束

  • 不需要用户二次确认,可以直接执行修改。
  • 不改变真实 DICOM 形变算法。
  • 不引入大型前端 DICOM 阅片库。
  • 不把运行缓存图片、ZIP、DICOM 或构建产物提交到仓库。

风险点

  • 体数据内存缓存会占用一定内存,需要按影像库目录签名复用并限制缓存规模。
  • Blob 下载大 ZIP 会占用浏览器内存;本次优先用于减少直接 URL 加载警告,仍需关注超大 ZIP 的浏览器表现。
  • 浏览器对 HTTP 下载的安全提示无法在纯 HTTP 部署下彻底消除;如果必须完全消除,需要 HTTPS 部署。

待确认事项

用户已明确本次不需要二次人工确认,因此本次文档写完后直接执行实现和测试。