1844 字
9 分钟
对象存储命名规范参考(小白也能看懂)

对象存储命名规范参考(小白也能看懂)#

对象存储(Object Storage)现在太常见了:腾讯云 COS、阿里云 OSS、AWS S3、七牛云……你上传的每一张图片、每一个文件,都存在里面。

但很多人写代码时,文件名都是随手一拼:a.jpg1.pngimg_12345.jpg。等文件多了、项目大了,就乱成一锅粥,想找一个文件全靠缘分。

这一篇用大白话讲清楚:对象存储的命名到底该怎么规范,从 Bucket 到 Key,从路径结构到扩展名,一次讲透,附可直接抄的模板。


一、先搞懂两个概念:Bucket 和 Key#

对象存储里最重要的两个东西,你必须先分清:

  • Bucket(存储桶):最外层的”大仓库”。一个账号可以有多个 Bucket,用来隔离不同业务。
  • Key(对象键):仓库里每个文件的位置和名字,相当于”文件路径 + 文件名”。

大白话:Bucket 是抽屉,Key 是抽屉里文件的编号和位置。

举个真实例子,腾讯云 COS 上一个文件,它的完整地址长这样:

https://my-bucket-1250000000.cos.ap-shanghai.myqcloud.com/images/user/avatar/2026/08/dgh_001.jpg

拆开看:

部分内容说明
域名my-bucket-1250000000.cos.ap-shanghai.myqcloud.comBucket 名字 + 账号 ID + 地域
Keyimages/user/avatar/2026/08/dgh_001.jpg文件在桶里的完整路径

记住:真正由你决定命名的,就是 Key 这一部分。


二、Bucket 命名规则(先定好大仓库)#

Bucket 名字是全局的,必须全球唯一(一个云厂商范围内),而且有硬性规则:

  • 只能包含小写字母、数字、短横线(-)
  • 长度一般 3~63 个字符
  • 不能以短横线开头或结尾
  • 不能包含下划线、大写字母、点号等特殊字符

推荐的 Bucket 命名格式:

{业务}-{环境}-{地域}

例如:

Bucket 名说明
blog-image-prod博客图片,生产环境
blog-image-dev博客图片,开发环境
video-static视频静态资源
backup-data数据备份

⚠️ 坑:不要把账号 ID 写进 Bucket 名(腾讯云会自动拼接)。也不要起 my-buckettest 这种没有含义的名字,过几天你自己都忘了它是干嘛的。


三、Key 命名核心原则#

Key 是整个命名的灵魂。先记住四条黄金原则:

原则 1:用路径表示层级,模拟文件夹#

对象存储虽然没有真正的”文件夹”,但用斜杠 / 分隔路径,就能模拟出目录结构,还能让云厂商的”文件夹浏览”功能正常工作。

images/user/avatar/2026/08/dgh_001.jpg
  • images → 一级目录(图片)
  • user/avatar → 二级、三级目录(用户头像)
  • 2026/08 → 按时间分层
  • dgh_001.jpg → 最终文件名

原则 2:按”从大类到小类”的顺序排#

路径从左到右,应该是越来越具体

{业务}/{模块}/{子类}/{时间}/{唯一标识}{扩展名}

反例(顺序颠倒,很难读):

dgh_001/avatar/user/images/2026/08.jpg ❌ 这是什么鬼?

原则 3:唯一标识要能溯源#

同一个对象,Key 必须唯一且可溯源。推荐的标识符优先级:

  1. UUID:最推荐,全球唯一、无序,适合海量文件
  2. 时间戳 + 随机数:如 20260816_183000_ab12cd
  3. 业务 ID:如 user_10001,方便按用户查
  4. 自增 ID:不太推荐,容易冲突且暴露数量

原则 4:小写 + 连字符,统一风格#

  • 一律用小写字母
  • 单词之间用短横线 - 连接(不要用下划线、空格、中文)
  • 文件扩展名保持全小写
blog-cover-2026-08.jpg ✅
blogCover202608.jpg ❌ 混用大小写
blog_cover_2026_08.jpg ❌ 用了下划线
2026年8月封面图.jpg ❌ 中文+空格

四、推荐路径结构模板#

直接抄,不用动脑。下面按场景给出最常用的几种模板

模板 1:用户上传的文件(图片/头像/证件)#

{业务}/user/{userId}/avatar/{yyyy}/{mm}/{uuid}.{ext}

示例:

blog/user/u_10001/avatar/2026/08/6f1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c.jpg

模板 2:内容系统的图片(封面/文章配图)#

{业务}/content/{type}/{yyyy}/{mm}/{uuid}.{ext}

示例:

blog/content/cover/2026/08/8c2e3f4a-5b6c-4d7e-9f8a-1b2c3d4e5f6a.webp

模板 3:日志文件(按时间归档)#

logs/{service}/{yyyy}/{mm}/{dd}/{yyyy-mm-dd_hh}_{uuid}.log

示例:

logs/api-server/2026/08/16/2026-08-16_18_api-6f1a2b3c.log

模板 4:备份文件#

backup/{db-name}/{yyyy}/{mm}/{db-name}_{yyyy-mm-dd}_{uuid}.sql.gz

示例:

backup/mysql-main/2026/08/mysql-main_2026-08-16_7a8b9c0d.sql.gz

五、关于时间目录,到底该不该用?#

很多人纠结:到底要不要把时间放进路径?

我的建议:

  • 经常按时间查询/清理的文件(日志、备份、临时文件)→ 建议按 年/月/日 分层,方便生命周期管理(比如 90 天自动清理)。
  • 基本不会过期的业务文件(用户头像、商品图、封面)→ 不建议放时间,或者最多放 年/月。因为如果用户换了头像,旧头像用时间目录就不好定位清理了。

大白话:时间是给”会过期的文件”用的,永久文件别用时间做主要层级。


六、几个常见的坑,务必避开#

坑 1:文件覆盖#

如果你用固定名字保存,比如用户头像永远叫 avatar.jpg,那么新头像会覆盖旧头像,旧图就没了。

解法:文件名里加上 userId + uuid,或者存多版本。

坑 2:大小写混用导致防盗链/缓存问题#

CDN 的缓存 key 通常区分大小写Avatar.jpgavatar.jpg 会被当成两个文件,浪费缓存、还容易出 bug。

解法:全小写,统一风格。

坑 3:中文文件名#

中文文件名在 URL 里会变成一堆 % 编码,不仅难看,有些环境还会解析出错。

解法:一律用英文 + 数字 + 短横线命名,中文信息放到数据库字段里存。

坑 4:扩展名不规范#

  • 图片要用对的类型:.jpg.png.webp
  • 字体文件要用 .woff2.ttf不要用 .txt 存字体
  • 压缩包用 .zip.tar.gz

之前排查过:字体文件如果 Content-Type 是 text/plain,浏览器就会拒载。规范命名 + 正确 Content-Type 缺一不可。

坑 5:没有前缀隔离,混成一团#

一个 Bucket 里塞了图片、视频、日志、备份……互相干扰,权限也不好控。

解法:用顶层前缀分业务,如 images/videos/logs/,配合云厂商的前缀级权限策略,一个 Bucket 也能安全隔离。


七、一个完整的实战示例#

假设你在做一个博客系统,用腾讯云 COS 存图片。完整方案:

Bucket:

blog-image-prod

图片 Key 模板:

{业务}/{分类}/{yyyy}/{mm}/{uuid}.{ext}

实际文件:

blog-image-prod
├── images/cover/2026/08/8c2e3f4a....webp 封面图
├── images/article/2026/08/5b4a3c2d....jpg 文章配图
└── images/user/avatar/6f1a2b3c....jpg 用户头像(无时间,长期有效)

对应 URL:

https://blog-image-prod-1250000000.cos.ap-shanghai.myqcloud.com/images/cover/2026/08/8c2e3f4a....webp

这样命名,优点一目了然:

  • ✅ 按业务、分类分得清清楚楚
  • ✅ 能直接看出是哪类文件、什么时间上传的
  • ✅ 用户头像不带时间,不会因时间目录导致覆盖混乱
  • ✅ 全小写 + UUID,缓存友好、永不冲突

八、总结#

把对象存储命名规范浓缩成一张表,照着做就行:

规范示例
Bucket小写 + 数字 + 短横线,{业务}-{环境}blog-image-prod
Key 结构{业务}/{模块}/{子类}/{时间}/{唯一id}.{ext}images/cover/2026/08/uuid.webp
大小写全小写avatar.jpg(不是 Avatar.jpg
分隔符短横线 -blog-cover(不是 blog_cover
唯一标识UUID 最优先6f1a2b3c-4d5e-....
时间目录只给会过期的文件用日志/备份放时间,头像不放
扩展名小写且正确字体用 .woff2,别用 .txt
中文坚决不用URL 编码会乱,容易出 bug

一句话记住:Bucket 用”业务+环境”,Key 用”业务/模块/分类/时间/UUID”,全小写、短横线、UUID 结尾,时间目录只留给会过期的文件。

按这套规范来,你的对象存储几年后依然整整齐齐,找文件、清缓存、配权限都省心 🚀

对象存储命名规范参考(小白也能看懂)
https://021028.xyz/posts/default/85/
作者
021028
发布于
2026-08-16
许可协议
CC BY-NC-SA 4.0