R2
R2 是 Worker 可访问的对象存储。Worker 绑定 API 与 Cloudflare 一致;对象数据由 operator 为整个平台选定的 Local 或 S3 backend 持有。
例如:
- 存储文件与二进制对象
- 从 Worker 读写对象
- 在任一受支持 backend 上执行分片上传
export default { async fetch(request: Request, env: Env): Promise<Response> { const url = new URL(request.url); const key = url.pathname.slice(1); if (request.method === "PUT") { await env.BUCKET.put(key, request.body); return new Response("ok"); } const object = await env.BUCKET.get(key); if (object === null) return new Response("missing", { status: 404 }); return new Response(object.body, { headers: { etag: object.httpEtag } }); },} satisfies ExportedHandler<{ BUCKET: R2Bucket }>;在 wrangler.jsonc 中绑定已存在的 bucket:
{ "name": "r2-app", "main": "src/index.ts", "r2_buckets": [{ "binding": "BUCKET", "bucket_name": "files" }]}bucket_name 必须指向 account 中已有的逻辑 bucket。语法见绑定。bucket 与 object 操作使用固定 Wrangler 或官方 SDK。
| 主题 | Cloudflare | open-compute |
|---|---|---|
| Worker API | R2 Workers API | 相同:head / get / put / delete / list、条件写、checksum、分片上传、HTTP metadata |
| 对象存储位置 | Cloudflare R2 | 单节点上配置的 Local 或 S3 authority |
| 全球就近存放 | 提供 | 不提供 |
| r2.dev 公开访问 | 提供 | 不提供 |
| 数据驻留限制 | 提供 | 不提供 |
REST / client/v4 |
提供 | 兼容 account-scoped bucket 与 object 操作 |
下一步:使用 bindings 开发 · 兼容性与限制