R2
是什么
R2 是 Cloudflare 的对象存储——一个用来存放文件的地方:图片、视频、备份、用户上传内容、构建产物。它使用与 Amazon S3 相同的 API,因此大多数 S3 工具和 SDK 无需改动即可直接对接。最显著的区别在于定价:R2 对存储和操作收费,但不收取出站流量费,因此对外提供数据是免费的。
优势
- 零出站流量费——对于媒体密集型或下载密集型应用是一大节省。
- 兼容 S3 的 API,现有工具和库可以直接使用。
- 可直接绑定到 Worker 进行读写,代码中无需任何凭据。
- 可置于 Cloudflare 的 CDN 之后,实现快速的缓存分发。
- 无需预置即可扩展到大对象和大存储桶。
取舍
- 它是对象存储,不是文件系统或数据库——无法在文件内部进行查询。
- 操作(PUT/GET/LIST)会计费,因此频繁的访问模式会累积成本。
- 强一致性和功能特性在细节上与 S3 有所不同;请留意边界情况。
- 对于体积小、频繁修改的值,KV 或 D1 更合适。
何时使用
将 R2 用于用户上传内容、生成的文件、大型静态资源、数据导出和备份——尤其是在 S3 上带宽成本会很高的任何场景。
与 vibe coding 的契合度
R2 与 AI 主导的构建配合得很好,因为绑定省去了通常的凭据处理流程——agent 直接写入 env.BUCKET。告诉 agent 文件是公开的(通过 Worker 或自定义域名提供)还是私有的(签名访问),这样它才能正确接入分发逻辑。下面的示例绑定一个存储桶并从 CLI 上传一个文件。
# wrangler.toml
[[r2_buckets]]
binding = "BUCKET"
bucket_name = "uploads"
npx wrangler r2 bucket create uploads
npx wrangler r2 object put uploads/logo.png --file ./logo.png