news 2026/4/18 5:35:04

cloudflare+hono使用worker实现api接口和r2文件存储和下载

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cloudflare+hono使用worker实现api接口和r2文件存储和下载

步骤也很简单,就是使用命令创建一个hono创建一个基础框架,然后绑定r2对象存储,然后写上传和下载的接口,然后测试发布即可。

使用命令:

pnpm create cloudflare@latest upload-r2

然后创建后打开,绑定r2:

bucket_name 这里添加你的存储桶名称即可,没有的话,在后台页面创建一个存储桶或者使用命令行创建一个。

然后运行命令:

wrangler deploy --minify

这个主要是将绑定的存储桶R2可以在代码中使用不提示报错。

然后在index.ts中写上传逻辑:

app.post('/upload', async (c) => { const form = await c.req.parseBody() const file = form['file'] as File if (!file || !file.name) { return c.json({ error: 'No file uploaded' }, 400) } const buffer = await file.arrayBuffer() const object = await c.env.R2.put(file.name, buffer) return c.json({ object }) })

这个代码主要就是拿到post请求中的file文件,然后使用R2存储到桶里面,写完之后会返回存储后的结果,可以本地运行测试,本地启动服务后,使用postman或者apifox都可以测试:

说明没有问题,这里可以上传任意类型的文件,访问的时候也可以访问任意类型。为什么不用Express框架?因为Express框架和cf不是很兼容,在访问视频文件或者大文件的时候,和cf不兼容,访问不到。所以强烈推荐Hono这个框架,而且Hono用起来和Express差不多,甚至更方便。

然后开始写访问文件逻辑和下载逻辑:

app.get('/download/:key', async (c) => { const key = c.req.param('key') const object = await c.env.R2.get(key) if (!object) { return c.json({ error: 'File not found' }, 404) } return c.body(object.body) })

这里主要就是发送get请求访问上传的文件,在apifox中访问刚才上传的文件:完美访问

还可以查询桶里面有哪些文件:

app.get('/files', async (c) => { const objects = await c.env.R2.list() return c.json({ files: objects.objects.map((object) => object.key) }) })

就会返回文件列表:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:32:00

Glyph旅游推荐:游记内容智能解析与路线规划系统

Glyph旅游推荐:游记内容智能解析与路线规划系统 1. 引言:从游记到智能旅行规划的范式跃迁 随着社交媒体和数字内容平台的普及,用户生成的旅游内容(如游记、照片、视频)呈指数级增长。然而,这些非结构化数…

作者头像 李华
网站建设 2026/3/10 17:08:46

前后端分离厨艺交流平台系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程

摘要 随着互联网技术的快速发展和人们生活水平的不断提高,厨艺交流逐渐成为社交活动中的重要组成部分。传统的厨艺交流方式受限于时间和空间,难以满足用户随时随地分享和学习的需要。同时,现有的厨艺平台多采用前后端耦合架构,导致…

作者头像 李华
网站建设 2026/4/8 14:55:35

PaddleOCR-VL发票识别:财务人员3步上手,免运维GPU环境

PaddleOCR-VL发票识别:财务人员3步上手,免运维GPU环境 你是不是也和我一样,每个月都要面对成堆的发票扫描件?作为公司会计,处理报销、核对金额、录入系统……这些工作本就繁琐,偏偏现有的OCR工具还总是“看…

作者头像 李华
网站建设 2026/4/17 22:15:13

麦橘超然代码实例:解析web_app.py中的模型加载逻辑

麦橘超然代码实例:解析web_app.py中的模型加载逻辑 1. 引言:麦橘超然 - Flux 离线图像生成控制台 在当前 AI 图像生成技术快速发展的背景下,如何在中低显存设备上实现高质量、可交互的本地化图像生成,成为开发者和创作者关注的核…

作者头像 李华
网站建设 2026/4/17 13:51:55

BGE-M3详细解析:余弦相似度计算的底层原理

BGE-M3详细解析:余弦相似度计算的底层原理 1. 引言:语义相似度的核心挑战与BGE-M3的定位 在自然语言处理领域,如何让机器真正“理解”文本之间的语义关系,一直是核心挑战之一。传统的关键词匹配或TF-IDF等方法难以捕捉深层语义&…

作者头像 李华