2.8 KiB
2.8 KiB
需求分析
开始时间:2026-05-03-23-22-10
原始需求
用户要求严格使用代码编纂工作流,并在最开始确认整体流程。本次需求分析、实现方案、测试方案和执行修改均不需要用户二次人工确认。
需要修复两个问题:
- 点击 DICOM 阅览中的切片滚动条时出现与 ZIP 文件相关的浏览器警告:
The file at ...head_ct_morph_selected_54ed40feeb63.zip was loaded over an insecure connection. This file should be served over HTTPS. - 切换 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 在
viewerSliceIndex、viewerWindow等状态变化时立即发请求;AbortController 只中断浏览器端等待,不能中止后端已经开始的体数据读取。 - ZIP 下载目前通过临时
<a>直接访问后端/api/file?path=...zip,浏览器可能显示 HTTP 文件下载安全警告;同时需要防止同一个 ZIP job 多次自动触发下载。
约束
- 不需要用户二次确认,可以直接执行修改。
- 不改变真实 DICOM 形变算法。
- 不引入大型前端 DICOM 阅片库。
- 不把运行缓存图片、ZIP、DICOM 或构建产物提交到仓库。
风险点
- 体数据内存缓存会占用一定内存,需要按影像库目录签名复用并限制缓存规模。
- Blob 下载大 ZIP 会占用浏览器内存;本次优先用于减少直接 URL 加载警告,仍需关注超大 ZIP 的浏览器表现。
- 浏览器对 HTTP 下载的安全提示无法在纯 HTTP 部署下彻底消除;如果必须完全消除,需要 HTTPS 部署。
待确认事项
用户已明确本次不需要二次人工确认,因此本次文档写完后直接执行实现和测试。