利用 Cloudflare R2 + Workers 搭建在线网盘

此前,我们发布了一篇博文,介绍如何利用 Cloudflare R2 与 PicList 一款高效的云存储和图片托管平台 来管理图片和文件。本项目 Cloudflare-R2-OSS 的思路与之类似,但提供了图形化界面,实现了类似网盘的功能,可用于存储软件、图片音频视频等文件。该方案无需借助其他额外工具,不过在上传大文件的体验上略逊于 PicList,例如超过300M的就无法上传。我们可以用到 PicList。

PS:发布这篇文章后 清羽飞扬大佬 留言刚好有二开基于 Cloudflare-R2-OSS 一个UI界面更好看且优雅的!果断部署更新!下方部署教程两个项目都通用。

演示网站 账号密码:aizrf

  • 演示网站为清羽飞扬大佬的 FlareDrive-R2

https://pan.001315.xyz/

界面预览

  • 图1为 Cloudflare-R2-OSS ,图2为 清羽飞扬大佬 的 FlareDrive-R2

20250321164824701.webp
20250321170925421.webp

下载测试

  • 既然是网盘我们当然要测试下载速度,最快跑到 60 MB/s 左右,均值在 20-30 MB/s 左右,很快了,当然下载速度是根据你的网络带宽而定。

20250321223258742.webp


搭建教程

Fork 仓库

在 Github Fork 项目,自己选择部署哪一个。

20250321032450935.webp

创建 R2 储存桶

前往 Cloudflare R2 新建一个 R2 储存桶。
20250321032701989.webp
设置你的存储桶名,名称随意设置,然后点击创建。
20250321032835888.webp
(第一种方法,不推荐使用,可直接忽略此步骤) 在储存桶设置中 R2.dev 子域 允许公开访问,复制公共储存桶 URL。 如开启 R2 存储桶的公开读写权限!你的存储资源有可能会被恶意刷取,造成资源付费。
20250321033713313.webp
公共 R2.dev 存储桶 URL 保存下来,如下的格式。

1
https://pub-888888888888888.r2.dev

(第二种方法,推荐使用) 使用R2的 自定义域名 您的存储桶的内容将可以通过该域公开访问。连接的网站还可以受益于 Cloudflare 功能,如机器人管理、访问和缓存。
20250413034329113.webp

保存下来,稍后设置 PUBURL 变量使用此域名。

新建 Cloudflare Pages 站点

前往 Cloudflare Pages,新建站点,选择连接到 Git,并选择刚刚 Fork 的仓库。点击开始设置。
20250321034308383.webp
20250321034333026.webp
20250321034432431.webp

添加环境变量

项目名称可自行修改,其它项目保持默认设置。点击环境变量并添加如下变量,自用只需要设置个管理员账号就行,演示账号无需设置。

  • 管理员的值代表允许写入的目录,多个目录请用英文逗号分隔。
  • 环境变量中请勿在目录前后添加逗号,否则会获得所有目录的写入权限。

20250321035355185.webp

变量名称 说明
PUBURL 使用你刚设置的储存桶自定义域名 用于存储桶访问
GUEST public/ 游客允许写入的目录
aizrf:aizrf * 管理员权限(账号:密码形式,允许写入目录,多目录用英文逗号分隔)
zrf:zrf zrf/,zrfPublic/ 演示账号设置

绑定 R2 储存桶

前往 Pages > cloudflare-r2-oss > 设置 > 函数 > R2 储存桶绑定,绑定对应的 R2 储存桶,变量名称为 BUCKET
20250321035953916.webp
20250321040043230.webp

重新部署

在部署页面点击重新部署按钮,完成设置后即可正式使用。
20250321040225799.webp

设置自定义域名

因为我这是小号部署的项目,域名没有在这个账号托管,你有域名并且在 cloudflare 托管了可以一键设置。
20250321041121946.webp
20250321041257642.webp

超过 300 MB 大文件上传

  • 超过 300 MB 的文件仅支持通过 S3 兼容性 APIWorkers 进行上传。

因此,建议采用 PicList 方案进行设置,详情请参考本篇博文 PicList - 一款高效的云存储和图片托管平台管理工具

如果你采用了分目录上传,例如演示网站中使用的 imgappvideo 目录不在根目录下,
请在 PicList 的设置中修改 上传路径 参数,例如:

1
video/{fileName}.{extName}

对于自定义域名,请将你的域名后面加上 /raw,例如:

1
https://pan.001315.xyz/raw

20250321200647126.webp

并且关闭格式转换
前往至 上传 👉 图片处理 👉 格式转换 ,关闭转换webp格式。
20250321204147131.webp

博主留言

  1. 在使用 PicList转换格式 功能启用状态,因为我一般默认设置为转换 webp格式 ,但如上传zip、MP4 等格式,这些文件会自动转换为预设的webp格式。所以我每次想要上传视频等,非图片的文件时,我得手动去关闭格式转换,有点麻烦。所以我使用这个项目除非大文件,视频等一般不用 PicList 上传。提了个issues已经通过,项目作者已经同意后续进行优化,很期待!!!

  2. 如通过 PicList 上传到 R2 在线网盘中是看不到略缩图的。下图两个是一个视频文件只是上传方式不一样。
    20250321213146861.webp


相关链接