专业的编程技术博客社区

网站首页 > 博客文章 正文

上传图片到cloudflare r2

baijin 2025-05-21 11:59:26 博客文章 6 ℃ 0 评论

要通过你之前提供的 Cloudflare Worker 代码上传一张名为 `wall.png` (大小约 100KB) 的图片,你需要执行一个 HTTP PUT 请求。这里我们使用 `curl` 这个常用的命令行工具来演示。


**假设:**


1. 你的 Cloudflare Worker 已经成功部署,并且可以通过一个 URL 访问,例如 `
https://your-worker.your-account.workers.dev`。

2. 你已经在 Worker 的设置中(通常是 `wrangler.toml` 或 Cloudflare 控制台)将一个 R2 存储桶正确绑定到了环境变量 `MY_BUCKET`。

3. 你要上传的图片 `wall.png` 位于你执行 `curl` 命令的当前目录下。

4. 你希望在 R2 存储桶中,这个对象(图片)的键(名称)也是 `wall.png`。


**操作步骤:**


你可以打开你的终端或命令行工具,然后执行以下命令:


```bash

curl -X PUT \

-H "Content-Type: image/png" \

--data-binary "@wall.png" \

"https://your-worker.your-account.workers.dev/wall.png"

```


**命令详解:**


* **`curl`**: 命令行工具,用于发送 HTTP 请求。

* **`-X PUT`**: 指定 HTTP 请求方法为 `PUT`。根据你的 Worker 代码,`PUT` 方法用于上传文件。

* **`-H "Content-Type: image/png"`**:

* 设置 HTTP 请求头 `Content-Type` 为 `image/png`。这是一个好习惯,它告诉服务器(以及 R2)你上传的是一个 PNG 图片。

* 当你的 Worker 代码通过 `object.writeHttpMetadata(headers);` 获取对象时,如果 R2 存储了这个 `Content-Type`,它会被包含在响应头中,浏览器就能正确地渲染图片。

* **`--data-binary "@wall.png"`**:

* 这是 `curl` 中用于发送文件内容作为请求体的关键部分。

* `--data-binary` 确保文件内容以二进制形式发送,不会进行任何额外的处理(例如 URL 编码或移除换行符,这对于二进制文件如图片至关重要)。

* `@` 符号告诉 `curl` 后面的字符串 `wall.png` 是一个文件名,`curl` 应该读取这个文件的内容作为请求体。**确保 `wall.png` 文件与你运行此命令的目录相同,或者提供完整/相对路径。**

* **`"https://your-worker.your-account.workers.dev/wall.png"`**:

* 这是请求的目标 URL。

* **`
https://your-worker.your-account.workers.dev`**: 替换成你实际的 Worker URL。

* **`/wall.png`**: 这是 URL 的路径部分。根据你的 Worker 代码 (`const key = url.pathname.slice(1);`),这部分(去掉开头的 `/`)将被用作 R2 存储桶中对象的键。所以,在这个例子中,图片在 R2 中的键将是 `wall.png`。


**执行后会发生什么:**


1. `curl` 会读取本地 `wall.png` 文件的二进制内容。

2. `curl` 向你的 Worker URL 发送一个 HTTP PUT 请求,请求体是 `wall.png` 的内容,`Content-Type` 头部设置为 `image/png`,URL 路径为 `/wall.png`。

3. 你的 Cloudflare Worker 接收到这个请求:

* 它解析出方法是 `PUT`。

* 它从 URL 路径中提取出键 `key` 为 `wall.png`。

* 它执行 `await env.MY_BUCKET.put("wall.png", request.body);`,将请求体中的图片数据上传到绑定的 R2 存储桶,并以 `wall.png` 作为键。

4. 如果上传成功,你的 Worker 会返回一个响应 `Put wall.png successfully!`。`curl` 会在终端显示这个响应。


**如何验证上传是否成功:**


1. **查看 `curl` 的输出:** 如果一切顺利,你应该会看到类似 `Put wall.png successfully!` 的消息。

2. **通过浏览器或 `curl` GET 请求下载:**

* 在浏览器中访问:`
https://your-worker.your-account.workers.dev/wall.png`

* 或者使用 `curl`:`curl -o downloaded_wall.png
https://your-worker.your-account.workers.dev/wall.png` 然后检查 `downloaded_wall.png` 文件是否正确。

3. **检查 Cloudflare R2 控制台:** 登录到你的 Cloudflare 账户,导航到 R2 部分,找到你绑定的存储桶,你应该能看到名为 `wall.png` 的对象,并且其大小约为 100KB,Content-Type 应该是 `image/png`。


**重要提示:**


* **替换占位符:** 务必将 `
https://your-worker.your-account.workers.dev` 替换为你 Worker 的实际 URL。

* **文件路径:** 确保 `wall.png` 的路径正确。如果它不在当前目录,你需要提供正确的相对或绝对路径,例如 `--data-binary "@/path/to/your/wall.png"`。

* **R2 绑定:** 再次确认你的 Worker 已正确绑定到 R2 存储桶,并且绑定的名称是 `MY_BUCKET`。

* **文件大小:** 100KB 对于 R2 和 Worker 的默认限制来说完全没有问题。对于非常大的文件(例如超过 Worker 请求体大小限制或 R2 单次操作限制),可能需要更复杂的上传策略(如分块上传),但对于 100KB,这种直接上传方式是完美的。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表