证据只存对象键:附件库到证据中心的演进
早期系统常把附件 URL 直接写进业务表。时间一长就会碰到:链路域名变更、临时签名过期、鉴权与审计无法统一。更稳的模型是:库里只存对象键(object key)与元数据,读取时再签发短期访问,并逐步演进成「证据中心」。
一、从附件到证据的演进
flowchart TB
A[v1 存完整 URL] --> B[v2 存 bucket + object key]
B --> C[v3 元数据: 哈希/标签/来源任务]
C --> D[v4 归档/复核/衍生件工作流]
读图: 从「存字符串 URL」到「存 key + 元数据 + 工作流」,每一步都用迁移脚本批处理,旧字段只读兼容一段时间。
演进可以分阶段推进,不必一次到位。先把真相源从 URL 换成 key,再补元数据与生命周期,风险更可控。
二、为什么 key 是真相源
flowchart TB
A[存完整 URL] --> B[域名变更 URL 失效]
A --> C[临时签名过期]
A --> D[无法统一鉴权]
A --> E[无法审计]
F[存 object key] --> G[域名/CDN 可换]
F --> H[签发时统一鉴权]
F --> I[哈希校验防篡改]
F --> J[衍生件不复制外链]
好处:
- 域名、CDN、网关前缀都能换
- 权限在「签发 URL」时统一校验
- 便于做哈希校验、防篡改与审计日志
- 同一对象可衍生预览图、转码件,而不复制语义含糊的外链
三、读取路径
sequenceDiagram
participant FE as 前端
participant API as 业务 API
participant ST as 对象存储
FE->>API: 请求预览证据
API->>API: 鉴权 + 审计
API->>ST: 生成短期签名 URL
ST-->>API: 返回 presigned URL
API-->>FE: 返回签名 URL
FE->>ST: 直连下载/播放
- 前端要预览 → 调业务 API
- 服务端鉴权 + 审计
- 返回短 TTL 签名 URL
- 前端直传下载/播放
四、上传路径
flowchart LR
A[前端] --> B{文件大小}
B -->|小文件| C[预签名 PUT 直传]
B -->|大文件| D[经网关分片中转]
C --> E[对象存储]
D --> E
E --> F[回调业务 API 存 key + 元数据]
F --> G[完成]
上传用预签名 PUT 或经网关中转,取决于文件大小与网络环境。无论哪条路,业务库最终只落 key 与元数据。
五、证据生命周期
stateDiagram-v2
[*] --> 上传中
上传中 --> 待归档: 上传完成
待归档 --> 已归档: 归档工作流
已归档 --> 待复核: 触发复核
待复核 --> 已复核: 人工确认
已复核 --> [*]
已归档 --> [*]: 过期清理
「证据」相对普通附件,多的是归档、复核、过期清理这些状态。key 做真相源之后,这些状态才有稳定的挂载点。
六、迁移步骤
flowchart TB
A[迁移准备] --> B[脚本: 解析旧 URL 提取 key]
B --> C[双写: 新字段 + 旧字段]
C --> D[回填: 批量处理历史数据]
D --> E[切读路径到新字段]
E --> F[验证: 校验失败清单]
F --> G[下线旧字段]
注意:
- 先双写/回填 key,再切读路径
- 记录校验失败清单,避免静默丢证据
- 归档任务可异步:热数据与冷数据分层
切读是风险最高的一步,需要明确「什么时候还能回滚」:
flowchart TB
A[准备切读] --> B{失败清单已清空?}
B -->|否| C[继续回填/人工核对]
C --> B
B -->|是| D[按租户/项目灰度切读]
D --> E{抽样校验通过?}
E -->|否| F[回滚读路径到旧字段]
F --> C
E -->|是| G[全量切读]
G --> H[观察窗口后再下线旧字段]
灰度切读比「全站一天切完」稳得多:先按租户或项目放量,抽样校验不过就回滚读路径;旧字段先只读保留,观察窗口过了再下线。这样即使解析脚本漏边角 case,也不会一次性放大成全站证据不可读。
七、衍生件管理
flowchart LR
A[原始证据 key] --> B[预览缩略图]
A --> C[转码件]
A --> D[OCR 文本]
B --> E[元数据关联]
C --> E
D --> E
E --> F[同一证据 ID 下多版本]
衍生件用同一证据 ID 关联,不复制外链,避免「哪个才是原件」的歧义。
八、小结
「证据中心」不是多一个菜单,而是 把文件从字符串 URL 提升为有元数据、有生命周期的对象。对象键做真相源,是后面归档、复核、合规的地基。