大家好,我的开源项目PakePlus可以将网页/Vue/React项目打包为桌面/手机应用并且小于5M只需几分钟,官网地址:pakeplus.com

步骤也很简单,就是使用命令创建一个hono创建一个基础框架,然后绑定r2对象存储,然后写上传和下载的接口,然后测试发布即可。
使用命令:
bash
pnpm create cloudflare@latest upload-r2
然后创建后打开,绑定r2:
bucket_name 这里添加你的存储桶名称即可,没有的话,在后台页面创建一个存储桶或者使用命令行创建一个。

然后运行命令:
bash
wrangler deploy --minify
这个主要是将绑定的存储桶R2可以在代码中使用不提示报错。
然后在index.ts中写上传逻辑:
javascript
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差不多,甚至更方便。
然后开始写访问文件逻辑和下载逻辑:
javascript
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中访问刚才上传的文件:完美访问

还可以查询桶里面有哪些文件:
javascript
app.get('/files', async (c) => {
const objects = await c.env.R2.list()
return c.json({ files: objects.objects.map((object) => object.key) })
})
就会返回文件列表:
