~/VibeHandbook
$39

Cloudflare

developers.cloudflare.com

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