六维教程

对象存储基础与 Bucket 管理

图片、视频、文档这类二进制大文件,用普通数据库或键值存储都不合适,体积大、访问模式又是整文件读取。Cloudflare R2 是专门的对象存储服务,用来存放这类非结构化数据,而且出口流量零费用,是它最大的卖点。

R2 是什么

R2 是 Cloudflare 自研的对象存储服务,名字来源于 Content Addressable Storage 的”R2”层级概念。它允许你把任意类型的文件,图片、视频、备份包、日志文件,统一以”对象”的形式存放在叫做 Bucket 的容器里。

每个对象由三部分组成

组成部分 说明
Key 对象名称,类似文件路径,例如 images/1.png
Data 对象内容,二进制流
Metadata 自定义元数据,键值对形式

对象存储不关心内容是什么,只负责按 Key 存取,这种简单模型让它能横向扩展到几乎无限的容量。

与 AWS S3 的关系

R2 完全兼容 S3 协议。也就是说,任何用 AWS SDK 写的、用 S3 命令行操作的、对接 S3 的第三方工具,改个端点地址和密钥就能直接用在 R2 上。

兼容项 说明
API 协议 兼容 S3 REST API,包括签名版本 4
SDK AWS SDK 全家桶、MinIO SDK、boto3 都能用
工具 s3cmd、rclone、Cyberduck 等图形工具直接连
数据格式 对象组织方式、元数据格式与 S3 一致

最大的差别在费用。S3 在数据被读取或外传时按流量计费,R2 不收出口费用,这对图片站、视频站、CDN 回源场景是数量级的成本节省。

与 KV D1 的定位区别

Cloudflare 平台上还有 KV 键值存储和 D1 关系型数据库,三者各自定位不同,放在一张表里对比就清晰了

对比项 R2 对象存储 KV 键值存储 D1 关系型数据库
数据形态 二进制文件、大对象 字符串值 表行数据
单条上限 单对象最大 5TB 单值 25MB 行数据视表结构
查询方式 按 Key 精确存取 按 Key 精确存取 SQL,支持条件聚合
是否可公开 可直接对外提供下载 私有,需 Worker 代理 私有,需 Worker 代理
典型场景 图片、视频、备份、静态资源 配置、缓存、用户资料 业务数据、复杂查询

简单记,R2 存文件、KV 存配置、D1 存数据。三者经常配合使用,例如 D1 存元数据、R2 存原始文件、KV 加速热点查询。

无出口费用优势

传统对象存储的成本结构里,出口流量费往往是最大头。例如某图片站每月从 S3 输出 10TB 流量,按 0.09 美元每 GB 计算,光出口费就要 900 多美元。

R2 的计费模型只有三项

计费项 免费额度(每月) 说明
存储容量 10GB 按实际占用空间计
A 类操作 100 万次 写入、列表等修改类操作
B 类操作 1000 万次 读取、头信息等查询类操作
出口流量 无限 完全免费

这意味着无论用户从 R2 拉取多少次文件、拉取多大体积,都不产生流量费。这对图片站、视频站、文件分发、CDN 回源的场景非常友好。

创建 Bucket

Bucket 是对象的容器,类似一个顶级文件夹。每个 Cloudflare 账户下可以创建多个 Bucket,相互隔离。

在仪表盘里进入 R2 页面,点击 Create Bucket,输入名称即可。Bucket 名称需要全局唯一,只能用小写字母、数字和短横线,长度 3 到 63 字符。

命令行同样可以创建

wrangler r2 bucket create my-assets

执行后输出

Creating bucket my-assets with a default jurisdiction of 'eu'.
Created bucket my-assets.

默认管辖区域会影响数据物理存储位置,对国内业务不敏感的话保持默认即可。

仪表盘上传下载

创建好 Bucket 后就能在仪表盘直接管理文件。进入 Bucket 详情页,点击 Upload 按钮可以选择本地文件上传,或者新建文件夹归类。

下载同样简单,每个对象右侧有下载按钮,也可以批量勾选后下载。这种图形化方式适合手动测试和小批量维护。

对象 Key 支持用斜杠分隔来模拟目录结构,例如 images/2026/avatar.png,仪表盘会按斜杠折叠显示为文件夹。但要注意 R2 本身是扁平结构,斜杠只是 Key 的一部分,没有真正的目录概念。

存储类别

R2 提供两种存储类别,用来在不同访问频率下优化成本

存储类别 适用场景 费用特点
Standard 频繁访问的热数据 存储单价高,读取不收额外费
Infrequent Access 偶尔访问的冷数据 存储单价低,每次读取收检索费

切换方式有两种。仪表盘里选中对象后点击 Edit metadata,在 Storage class 下拉框里切换。命令行用 wrangler r2 object put 时加 --storage-class 参数

wrangler r2 object put my-assets/archive/2024.zip --file ./2024.zip --storage-class INFREQUENT_ACCESS

冷热分层策略一般这样设计,最近 30 天的图片放 Standard,更早的归档放 Infrequent Access,能省下一半以上的存储费。

小结

R2 把对象存储的门槛降得很低,免费额度足够个人项目跑很久,无出口费更是直接拉低了流量成本。这一篇认识了它的定位和基本操作,下一篇讲怎么用 S3 兼容 API 把它接入到代码里。

下一篇 S3 兼容 API 与 SDK 集成

上一篇
死信队列与重试策略
下一篇
S3 兼容 API 与 SDK 集成