跳转到内容
搜索文档

Workers API

最后更新 查看 MarkdownAgent 设置

Workers 使您能够在边缘运行代码。将 R2 存储桶绑定(binding)到 Worker 后,您可以直接使用 Workers API 读写对象。

1. 创建存储桶

存储桶用于在 R2 中存储对象。要创建新的 R2 存储桶:

  1. 登录您的 Cloudflare 账户:

    npx wrangler login
  2. 创建名为 my-bucket 的存储桶:

    npx wrangler r2 bucket create my-bucket

    如果提示,请选择要在其中创建存储桶的账户。

  3. 验证存储桶是否已创建:

    npx wrangler r2 bucket list
  1. 在 Cloudflare 仪表板中,前往 R2 object storage(R2 对象存储)

    Go to Overview ↗
  2. 选择 Create bucket(创建存储桶)

  3. 输入存储桶名称。

  4. 为存储桶选择位置默认存储类别

  5. 选择 Create bucket(创建存储桶)

2. 创建带有 R2 绑定的 Worker

  1. 创建新的 Worker 项目:

    npm create cloudflare@latest -- r2-worker

    出现提示时,选择 Hello World example(Hello World 示例),并选择 **JavaScript(或 TypeScript)**作为模板。

  2. 进入项目目录:

    cd r2-worker
  3. 向 Wrangler 配置文件添加 R2 绑定。将 my-bucket 替换为您的存储桶名称:

    {
      "r2_buckets": [
        {
          "binding": "MY_BUCKET",
          "bucket_name": "my-bucket"
        }
      ]
    }
    [[r2_buckets]]
    binding = "MY_BUCKET"
    bucket_name = "my-bucket"
  4. (可选)如果您使用 TypeScript,请重新生成类型:

    npx wrangler types

3. 读写对象

使用绑定与存储桶交互。此示例根据 URL 路径存储和检索对象:

src/index.jsjs
export default {
	async fetch(request, env) {
		// Get the object key from the URL path
		// For example: /images/cat.png → images/cat.png
		const url = new URL(request.url);
		const key = url.pathname.slice(1);

		// PUT: Store the request body in R2
		if (request.method === "PUT") {
			await env.MY_BUCKET.put(key, request.body);
			return new Response(`Put ${key} successfully!`);
		}

		// GET: Retrieve the object from R2
		const object = await env.MY_BUCKET.get(key);
		if (object === null) {
			return new Response("Object not found", { status: 404 });
		}
		return new Response(object.body);
	},
};
src/index.tsts
export default {
	async fetch(request, env): Promise<Response> {
		// Get the object key from the URL path
		// For example: /images/cat.png → images/cat.png
		const url = new URL(request.url);
		const key = url.pathname.slice(1);

		// PUT: Store the request body in R2
		if (request.method === "PUT") {
			await env.MY_BUCKET.put(key, request.body);
			return new Response(`Put ${key} successfully!`);
		}

		// GET: Retrieve the object from R2
		const object = await env.MY_BUCKET.get(key);
		if (object === null) {
			return new Response("Object not found", { status: 404 });
		}
		return new Response(object.body);
	},
} satisfies ExportedHandler<Env>;

4. 测试和部署

  1. 在本地测试 Worker:

    npx wrangler dev
  2. 开发服务器运行后,测试存储和检索对象:

    # Store an object
    curl -X PUT http://localhost:8787/my-file.txt -d 'Hello, R2!'
    
    # Retrieve the object
    curl http://localhost:8787/my-file.txt
  3. 部署到生产环境:

    npx wrangler deploy
  4. 部署后,Wrangler 会输出 Worker 的 URL(例如 https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev)。测试存储和检索对象:

    # Store an object
    curl -X PUT https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev/my-file.txt -d 'Hello, R2!'
    
    # Retrieve the object
    curl https://r2-worker.<YOUR_SUBDOMAIN>.workers.dev/my-file.txt

请参阅 Workers R2 API 文档了解完整 API 参考。

后续步骤

CORS

为基于浏览器的上传配置 CORS。

这篇文档对您有帮助吗?