01 它是干嘛的
S3 是 AWS 的第一款产品,也是整个云存储的行业标准。它最容易被误解的地方在于「它不是硬盘」:它没有文件夹、不能打开某个文件改几个字节、也不能像 U 盘一样挂到系统里。它是一个只用网络接口读写的巨大仓库,容量近乎无限、可靠性极高,价格还很便宜,因此成了「互联网的硬盘」。
02 为什么会有它
在 S3 之前:文件存哪儿都别扭
过去存放海量文件只有两条路。一条是用硬盘:容量有限、会坏、要人工备份,一部高清电影就能塞满;硬盘就像只能装那么点东西的抽屉,装不下就得再买一个,还得记得每个抽屉里放了什么。另一条是搭一套专业存储系统,但这要买昂贵的设备、请懂行的人维护,普通公司根本玩不起。
而互联网公司要存的东西又特别多又特别杂:用户头像、商品图片、日志、备份、视频。这些东西数量以亿计、单个体积大小不一、绝大多数存进去之后就很少改动,却必须随时能取出来。用传统硬盘或数据库来装它们,既贵又容易出事。
亚马逊的解法很反常:干脆把存储做成一个「通过网络地址就能读写」的服务。你不需要知道文件在哪台机器上,只要凭一个地址发起请求,就能存进去或取出来;底层硬件的损坏、扩容、复制全部由服务方在幕后处理。2006 年 S3 上线时,它第一次让「存储」变成了一种像自来水一样按用量计费的公共资源。
03 它怎么工作
S3 只有三个动作:往桶里放对象、从桶里取对象、按规则管理对象。所谓「目录」其实只是文件名里的一段斜杠,底层是完全扁平的,这正是它能做到近乎无限容量的原因。
一个文件是怎么存进 S3 的:桶、对象与分片上传
- 1① 建一个桶(Bucket)
桶是存放对象的顶层容器,名字必须全球唯一,像是你在互联网这个巨大仓库里租下的一个专属货架区。
- 2② 用 PUT 上传对象
上传时你给文件起一个「键(Key)」,比如 photos/2026/cat.jpg。键里的斜杠只是命名习惯,方便人看懂,系统里并不存在真正的文件夹。
- 3③ 大文件分片并发上传
超大文件被切成许多小块同时传输,某一块失败了只需重传那一块,几个 GB 的文件也能稳定上传完成。
- 4④ 用 GET 读取,或生成临时地址
读取同样只是一次网络请求。需要让别人下载时,可以生成一个带有效期与权限的临时链接,既方便又不用暴露密钥。
- 5⑤ 生命周期规则自动整理
可以设定规则,让旧文件自动转入更便宜的存储、到期自动删除、或复制一份到别的地区做备份,全程无需人工干预。
04 谁在用它
用户上传的头像、附件、商品图都放进 S3,配合 CDN 分发,读写快、成本低。
数据库备份、历史日志长期存放,靠极低的存储费与高可靠性替企业省下磁带与硬盘的钱。
把各种原始数据先集中倒进 S3,再由分析工具统一处理,是当下流行的数据架构起点。
前端页面、图片、脚本直接存 S3 并由 CDN 分发,无需自建文件服务器。
S3 常作为训练数据、日志、报表的统一存放地,被各类计算服务直接读取。
05 怎么用
核心概念只有「桶、键、权限」三样,会命令行就能立刻开始存取文件。
- 01在控制台创建一个桶,选择离用户最近的区域,并保持「阻止公开访问」的默认设置。
- 02为主机或程序创建一个访问密钥,注意只授予它需要的那几个桶的权限,不要给全权限。
- 03用命令行或代码把文件上传进桶,键名建议带上日期与业务含义,便于日后查找。
- 04需要公网访问时,绑定自定义域名或开启 CDN,而不是直接把整个桶设为公开。
- 05配置生命周期规则:临时文件到期自动清理,冷数据自动转入更便宜的存储层。
- 06重要数据开启版本控制与跨区域复制,防止误删或区域性故障导致数据丢失。
# 1. 创建桶(桶名需全球唯一)
aws s3api create-bucket --bucket my-bucket-2026 --region us-east-1
# 2. 上传一个文件:键就是完整路径字符串
aws s3api put-object \
--bucket my-bucket-2026 --key photos/cat.jpg --body ./cat.jpg
# 3. 下载(也可以用 aws s3 cp 做整目录同步)
aws s3api get-object \
--bucket my-bucket-2026 --key photos/cat.jpg ./downloaded.jpg
# 4. 生成 1 小时有效的临时下载地址(预签名 URL)
aws s3 presign s3://my-bucket-2026/photos/cat.jpg --expires-in 3600避坑提示
- !把长期密钥写进代码是云上最常见的事故来源。程序请用临时凭证,给别人下载用带有效期的临时链接。
- !对象存储不支持「改名」:改名等于复制一份再删掉旧的,大文件操作前先算一下耗时与费用。
- !桶名全球唯一且创建后不能改,命名时带上业务与环境(如 prod-assets-cn),否则以后会冲突。
06 关键概念
- 对象存储
- 用「桶 + 键」存放文件的服务,没有目录树,也不能像硬盘那样只改文件的一小段。
- 桶(Bucket)
- 存放对象的顶层容器,名字全球唯一,类似你在巨大仓库里租下的专属货架。
- 键(Key)
- 对象的名字,可以写成带斜杠的长字符串,看起来像路径但并不是真的文件夹。
- 预签名 URL
- 服务器临时签发、带权限与有效期的下载地址,让下载者无需知道密钥。
- 版本控制
- 每次覆盖都保留历史版本,误删或误改可以随时找回上一版。