百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

上传图片到cloudflare r2(上传图片到七牛云并返回图片url)

haoteby 2025-07-02 20:47 4 浏览

要通过你之前提供的 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,这种直接上传方式是完美的。

相关推荐

DIY桌面激光雕刻机#是时候展现真正的技术了

激光雕刻机。这期视频我们来看一下我是如何DIY一台桌面激光雕刻机。前几天在水池子边上发现了一台旧电脑,我看这电脑上还有一些东西可以利用到,比如光驱上面拆出了步进电机和滑轨。所以本期视频我将用这些废品去...

100000块多米诺骨牌拼成超级马里奥,这款机器人1天就完成了

智东西(公众号:zhidxcom)编译|王健恩编辑|高歌智东西7月30日消息,美国工程师兼YouTube博主MarkRober创造出了一个可以自动摆放多米诺骨牌的机器人。这个机器人被命名为D...

这个3D打印机器人可以在30秒内打开密码锁

密码锁看似很安全?也许曾经是,但现在你可要当心了!这是因为一台3D打印制造的机器人就可以在半分钟内打开你的密码锁。上周四,知名黑客萨米·卡姆卡尔(SamyKamkar)在自己的网站上公布了一个称之为...

密码锁也不安全 这款机器人30秒即可自动打开

大学生和体育爱好者们要注意了,千万不要再把贵重物品存放在公共储物柜里。因为现在已经出现了一种3D打印的机器人,据说世界上各大锁商推出的大部分密码锁,它都能够在30秒之内打开。著名黑客山米·卡姆卡(Sa...

硬件单片机模拟器,再也不用买开发板了...

#头条创作挑战赛#记得2006年在凌阳科技(sunplus)工作的时候,凌阳科技开发了自己的编译器/集成开发环境(unspIDE),那个IDE除了有keil那样的编辑器、编译器、链接器、调试器、下载...

3D打印机分哪几部分构成?(3d打印机结构组成及系统分析)

3D打印机的构成根据技术类型(如FDM、SLA、SLS等)有所不同,但以最常见的FDM(熔融沉积成型)3D打印机为例,其核心组成部分可分为以下模块:1.机械结构框架提供整体支撑和稳定性,常见材质为金...

初学者学伺服都需要什么?石家庄诺仕通

#初学者学伺服都需要什么?#对于初学者学习伺服系统,需要从...

arduino(arduino是单片机吗)

arduino学习笔记arduino学习笔记1-什么是arduino?...

自制写字机,你需要的全套资料都在这里

小编之前发过《用废旧光驱制作迷你绘图仪》,很多读者都成功制作了自己的绘图仪。但是该方法的缺点是gcode要在inkscape软件中生成,然后通过grbl-controller这个没有界面的程序发送画图...

自己动手DIY3D打印机 瞬间效果出现桌面时,大家都惊呆了!

3D打印机,对数码产品比较了解的朋友都知道,但是真正玩过的童鞋可能就不多了。其实3D打印机离我们并不远,随着3D打印技术越来越成熟,3D打印机的学习资料也越来越多,这让自己动手做一台桌面3D打印机也成...

机器人仅用24小时将十万块多米诺骨牌拼出马里奥,创下世界纪录

十万块多米诺骨牌倒下是个啥场面?等等,十万块?那得搭多久啊?...

如何制作一个机器人?(制作机器人的方法)

1.简单机械机器人(例如自动小车)2.智能机器人(带有人工智能或计算机视觉)3.工业机器人(用于生产自动化)4.人形机器人(类人结构,可以行走、对话)...

CrowPi2树莓派4学习套件评测第1部分–开箱和首次启动

文章来源:CNXSoftware中文站2020年6月,我曾写过一篇关于深圳易科诺...

基于 Arduino UNO 的蓝牙汽车(arduino智能小车蓝牙控制app)

HC-05蓝牙模块HC-05是一款易于使用的蓝牙SPP模块,针对流畅的串行无线通信配置进行了优化。串口蓝牙模块是完全合格的蓝牙V2.0+EDR(增强数据速率)3Mbps调制,具有总2.4...

电机驱动设计方案带你初识机电一体化

在直流电机驱动电路的设计中,主要考虑以下几点:功能:电机是单向还是双向转动?需不需要调速?...