Files
xsl a1d0171fc5
CI / lint / typecheck / import-linter / tests / secrets (push) Canceled after 0s
feat(uploads): 本地磁盘直传(COS 降级路线)+ 报告照片存在性校验
- POST /uploads/direct:原始字节 body + Content-Type 申报 + scene query(默认 report_photo),场景/类型/大小三重校验复用 storage 既有规则,落盘 var/uploads/<scene>/<user_id>/<uuid>.<ext>(config 新增 upload_dir),key 布局与 COS 同构;不加 python-multipart 依赖
- storage/local.py:save_direct_upload + require_local_upload(resolve 归并 + is_relative_to 归属收敛 + 存在性校验,越界/模拟/不存在一律 404)
- report/service.create_report:资格校验后、配额预扣前插入照片存在性校验(模拟 key 被拦且不消耗额度;regenerate 复用已验 photo_meta 不复核)
- 测试:test_upload_direct 14 单测 + test_upload_direct_flow 4 集成(真 key 全链路/假 key 404 零流水/401/40010)

偏差说明:test_report_flow._create_report 改走 /uploads/direct 拿真 key(存在性校验必然封死假 key),40920 与幂等重放两条断言语义未动。
2026-09-12 00:24:01 +08:00
..

"""storage 域 — COS 直传预签名(FR-SYS-03 / T-P1-27)。

分层位置:共享能力层(与 identity/billing/task 同层), 只准 import packages.shared / packages.domain 与 qcloud_cos(COS SDK)。 SDK 必须隔离在 CosSigner Protocol 后面,业务与测试都不直连。

实现任务:docs/开发任务包/T5-上传预签名.md(worktree task/t5-upload-presign)。 """