01 它是干嘛的
OSS 是阿里云的对象存储服务,用「存储空间 + 对象」的扁平结构保存任意文件。它不像硬盘有容量上限、也不怕文件多,适合存放图片、音视频、日志、备份等海量数据,并可直接配合 CDN 对外分发。
02 为什么会有它
硬盘会满、目录会乱:海量文件为什么需要专门的仓库
普通服务器用文件夹和硬盘存东西,有两个天花板:一是容量有限,硬盘就那么大,装满就得加盘、迁移;二是目录一多就乱,几百个文件夹、几百万个文件塞在一台机器上,找文件越来越慢,管理和备份都是噩梦。
更现实的是业务形态变了。一个图片社区每天新增几十万张图,一个视频站每年产生几十万小时素材,一个 App 每天写几个 TB 的日志。这些文件「写一次、读很多次」,几乎从不修改,但要长期保存、随时能取。用传统文件系统扛这种量级,成本与运维都受不了。
对象存储就是为这种场景设计的:它假装自己是「桶」,你把文件丢进去,每个文件配一把唯一的钥匙(键);取的时候拿钥匙换文件。文件数量对系统几乎无感,容量随存随扩,还能自动做多地冗余。OSS 是国内最早大规模商用的对象存储之一,伴随阿里自身海量图片与视频业务成长起来。
03 它怎么工作
OSS 把文件当「对象」处理:大文件被切成多块并发上传,系统记录每个对象的元数据用于检索,读取时通过网址或 CDN 从最近的节点返回。
一个文件从上传到被访问:分片、元数据与就近分发
- 1① 创建存储空间
存储空间(Bucket)就像一个大抽屉,你为业务建一个桶,命名全局唯一,并选择它所在的地域。
- 2② 分配权限与凭证
设置桶是私有还是公开读,并给程序发放只含必要权限的访问密钥,密钥绝不写进前端。
- 3③ 分片并发上传
大文件被自动切成多个分片同时上传,单片失败只重传该片,几百 GB 的文件也能稳定传完。
- 4④ 记录元数据
每个对象的类型、大小、哈希、自定义标签都被记录,用于检索、分类与生命周期管理。
- 5⑤ 读取与分发
客户端用网址直接下载,热点内容经 CDN 就近命中边缘节点,不必每次回源到存储。
04 谁在用它
用户的头像、商品图、短视频原片存进 OSS,再由 CDN 分发,是内容类应用的标配。
表单附件、下载包、安装包、静态资源统一放入 OSS,避免挤占应用服务器的磁盘。
数据库备份、历史日志长期存放,按低频或归档类型存储,成本大幅降低。
作为 MaxCompute、Flink 等计算引擎的原始数据存放地,实现存储与计算分离。
把纯静态的前端页面放在 OSS,绑定域名即可访问,无需购买服务器。
05 怎么用
会用浏览器上传文件就能起步;要用得安全高效,需要理解权限与生命周期规则。
- 01在控制台创建一个存储空间,选择地域(尽量与你的业务资源同区域)。
- 02创建 RAM 子账号并只授予该存储空间的读写权限,生成访问密钥给程序使用。
- 03用控制台、ossutil 命令行或 SDK 上传文件。
- 04为需要对外访问的内容绑定自定义域名并开启 CDN 加速。
- 05配置生命周期规则:自动删除临时文件、把冷数据转为低频或归档存储。
import oss2
auth = oss2.Auth('<AccessKeyId>', '<AccessKeySecret>')
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'my-bucket')
# 上传一个本地文件
bucket.put_object_from_file('photos/cat.jpg', '/tmp/cat.jpg')
# 生成一个 60 秒内有效的临时下载链接(不会暴露密钥)
url = bucket.sign_url('GET', 'photos/cat.jpg', 60)
print(url)避坑提示
- !访问密钥千万不要写进前端代码或提交到代码仓库,公网读取请用签名链接或 CDN 回源鉴权。
- !对象存储没有「重命名」操作,改名等于复制加删除,大文件改名之前先估算耗时与流量费用。
- !存储空间名全局唯一且创建后不可修改,命名时带上业务与环境的语义,方便后续管理。
06 关键概念
- 对象存储
- 用「桶 + 键」方式保存文件的仓库,没有真正的目录树,也不支持随意修改文件中途一段。
- 存储类型
- 标准、低频、归档等档位,访问越少越便宜,但取回可能需要等待与额外费用。
- 签名链接
- 服务端临时签发的带权限与有效期的网址,让客户端直接上传下载而不暴露密钥。
- 生命周期规则
- 按时间自动转移或删除对象的策略,用来控制长期存放的成本。