自从把域名和 CDN 转移到了 cloudflare 之后,这个星期有研究了下CF的其他服务,比较有趣的是 workers,可以用来开发和部署 serverless applications,而且每天免费的额度有10w次 requests。然后是R2对象存储,也有免费的10GB 空间,每个月100万A类操作,1000万B类操作(国内更多按流量计费)。所以就有了个想法,用 workers 来开发个自己能用的网盘,薅下CF的羊毛。
这几天也没太多事,陆续花了三四天的时间,基本完成,实现了以下几个功能:
- HTTP Basic Auth,并绑定到所有操作
- R2文件列表视图,逐级浏览
- 文件上传、删除和下载
- 文件夹上传
- 源码:https://github.com/wp1998/cloudflare-worker-R2-broswer,部署的时候注意修改配置文件 wrangler.toml
过程中也遇到了一些问题:
R2 存储服务的问题
和其他对象存储一样,R2是没有文件夹概念的,所谓的文件夹路径只是文件对象Key(如“lizhi/album/1701/01 大象.mp3”)中“/”的连接部分,取原始的文件名是需要分离。同理,没有文件夹的操作,上传文件夹其实就是创建文件夹的过程,不过必须保证文件夹非空。
文件类型(如“audio/mpeg”)需要自己处理并保存到元数据中。
JS的问题
workers 并不是一个前端应用环境,没法用组件来快速搭建,所以在做这个的过程中相当于把 bootstrap 重新学习了一遍,本来对构建打包一堆配置这种模式也挺反感的,所以这种方式在当下也挺有意思的,也得亏了 chatGPT 的帮助。
同时也使用 aplayer.js 做了一个听歌的分支: https://r2-cf-pages.pages.dev/