上传存储

上传存储是图片系统的入口。第一版可能把图片写到业务服务器本地磁盘,但很快会遇到扩容、备份、下载带宽和多机房一致性问题。

本章主线

本章讲三件事:

  1. 上传流程:客户端、业务服务和存储系统如何协作。
  2. 存储方案:本地磁盘、共享存储、对象存储的取舍。
  3. 命名设计:对象 key、目录、hash 和多租户隔离如何设计。

客户端直传

生产系统通常让客户端直传对象存储:

客户端 -> 业务服务申请签名
客户端 -> 对象存储上传
对象存储/客户端 -> 通知业务服务完成

这样业务服务不再承载大图片上传流量,只负责鉴权、签名和元数据。

对象命名

图片 key 不应直接使用原始文件名。推荐包含租户、日期和文件 ID:

images/{tenant}/{yyyy}/{mm}/{dd}/{image_id}.jpg

原始文件名只保存在元数据中。对象 key 要稳定、不可猜测,并支持后续冷热分层和批量清理。

元数据表

图片元数据至少包含:

  • image_id
  • owner_id
  • object_key
  • width / height
  • format
  • size
  • hash
  • audit_status
  • created_at

上传完成不代表可访问。图片通常要经过审核、压缩或派生图生成后,才进入可用状态。

章节