Skip to content
返回云服务

Cloudflare R2 对象存储

S3 兼容的对象存储,零出口费用,适合媒体、备份和大型数据集。

Cloudflare进阶

为什么

R2 存储 $0.015/GB/月但出口 $0 — S3 出口 $0.09/GB。100GB 站点月出口 1TB,R2 省 $90/月。S3 API 兼容意味着直接替换。

何时使用

用于用户上传、向用户提供视频/图片、数据库备份和 ML 数据集。避免作为主数据库或需要频繁强一致写入的对象。

如何做

1. 创建 bucket — wrangler r2 bucket create my-bucket(或面板) 2. S3 API — 生成 API token,用端点 https://<account>.r2.cloudflarestorage.com 3. 绑定到 Worker — [[r2_buckets]] binding="BUCKET" bucket_name="my-bucket" 4. 上传 — wrangler r2 object put my-bucket/file.png --file=./local.png 5. 公开访问 — bucket 上自定义域名,或通过 Worker 服务(签名 URL) 6. 生命周期 — 通过 bucket 规则 N 天后自动删除 7. 从 S3 迁移 — rclone 或 aws s3 sync 用 R2 端点

示例

// Worker 服务 R2 对象,支持 range(视频流) export default { async fetch(request: Request, env: Env): Promise<Response> { const url = new URL(request.url); const object = await env.BUCKET.get(url.pathname.slice(1), { range: request.headers.get("Range") || undefined, }); if (!object) return new Response("未找到", { status: 404 }); const headers = new Headers(); object.writeHttpMetadata(headers); headers.set("etag", object.httpEtag); if (object.range) headers.set("Content-Range", `bytes ${object.range.offset}-${object.range.offset + object.range.length - 1}/${object.size}`); return new Response(object.body, { headers }); }, }; // 从 S3 迁移到 R2 rclone copy s3:my-s3-bucket r2:my-r2-bucket --transfers 32

常见问题

  • ⚠R2 覆盖时最终一致 — PUT 后立即读可能返回旧对象
  • ⚠无 bucket 级公开访问 — 必须通过 Worker 或自定义域名服务,不像 S3 网站端点
  • ⚠分片上传 >5GB 需 S3 API — wrangler CLI 尚不支持分片

最佳实践

  • ✓通过 Worker + Cache API 服务媒体 — 边缘缓存使 R2 读取几乎免费
  • ✓备份用生命周期规则 — 90 天后自动删除,避免手动清理
  • ✓上传用预签名 URL — 客户端直传 R2,省 Worker CPU

常见问题解答

什么是Cloudflare R2 对象存储?它解决什么问题?

S3 兼容的对象存储,零出口费用,适合媒体、备份和大型数据集。 它可帮助开发者在不自建基础设施的前提下完成部署、存储与扩展,是云服务选型的核心参考。

如何在 5 分钟内上手Cloudflare R2 对象存储?

两步即可跑通:① 创建 bucket — wrangler r2 bucket create my-bucket(或面板);② S3 API — 生成 API token,用端点 https://<account>.r2.cloudflarestorage.com。建议先用免费套餐验证流程,再接入生产环境。

Cloudflare R2 对象存储 最容易踩的坑是什么?

最高频的问题是:R2 覆盖时最终一致 — PUT 后立即读可能返回旧对象。建议在上线前用 checklist 逐项核对,并在 CI 中加入策略与配置扫描。

Cloudflare R2 对象存储 的最佳实践有哪些?

Cloudflare R2 对象存储 的最佳实践包括:通过 Worker + Cache API 服务媒体 — 边缘缓存使 R2 读取几乎免费;备份用生命周期规则 — 90 天后自动删除,避免手动清理;上传用预签名 URL — 客户端直传 R2,省 Worker CPU。其中首条「通过 Worker + Cache API 服务媒体 — 边缘缓存使 R2 读取几乎免费」应作为团队默认规范写入 IaC 模板。

Cloudflare R2 对象存储 如何控制成本与避免账单意外?

三招防超支:① 为所有资源打 env/team 标签并启用账单告警;② 用预算阈值触发 Slack/邮件通知;③ 定期用 Cost Explorer 审查闲置资源并清理。Cloudflare R2 对象存储 多数提供免费套餐,先在免费额度内验证再放量。