夜庭記

利用Cloudflare Workers将Google Drive转换成S3兼容存储

折腾2026/04/141,177 字约 3 分钟

起因是收到了Google One的邮件提示免费升级到了5T的Google Drive.

白给的Google Drive量大固然不错,我打算用来做Afilmory存储照片的容器。Afilmory仅支持Github仓库或是对象存储,好在有AWS S3兼容存储,那么只需要将Google Drive API包装成S3兼容的API。rclone已有实现基本的S3服务,但需要部署在服务器上。Reddit上有人也有提过这个想法,但是并没有人留下解决方案。

秉持着免费到底的原则,有没有一种办法能够既能将Google Drive转化为S3兼容存储又能实现国内流畅访问容器内的文件内容呢?我想到了利用Cloudflare的Workers服务,碰巧的是三个月前就有开发者开源了,就不用自己动手从零开始。

GitHubnexryai/google-drive-s3Use Cloudflare Workers to turn your Google Drive into S3 object storage at no extra cost !TypeScript · ★ 14

我在此仓库的基础上添加了允许公开读取容器的选项,更加适合作为普通图床的存储容器。

GitHubMusenxi/google-drive-s3Use Cloudflare Workers to turn your Google Drive into S3 object storage at no extra cost !TypeScript · ★ 1

那么就开始这篇教程。

获取API Token

该项目利用rclone获取Google Drive的API,rclone官网有详细的步骤根据官网的步骤在Google API控制台进行操作

  1. 新建一个项目,接着点击启用API和服务
启用API和服务
  1. 搜索google drive api,点击进入选择启用
启用API
  1. 在左侧栏选择凭证,如果显示的跟下面一样则点击进入配置
配置界面
受众群体选择外部
  1. 在OAuth权限请求页面内点击数据访问,点击添加或移除范围。
数据访问
  1. 在弹出的右侧栏内找到底部的手动添加范围在文本框内填入https://www.googleapis.com/auth/docs,https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/drive.metadata.readonly,点击添加到表并更新
  2. 点击目标对象,在下方的测试用户内点击Add users输入自己的Google账号。
  3. 在左侧栏选择概览,创建OAuth客户端,应用类型选择桌面应用,点击创建。
  4. 记住弹出的界面中的客户端 ID和客户端密钥,或者直接点击下载JSON
  5. 点击目标对象,发布应用

接着下载安装rclone或是直接brew install rclone / scoop install rclone在终端中打开输入rclone config新建remote,输入一个名称回车后选择Google Drive对应的数字。输入刚刚记录的客户端 ID和客户端密钥。Scope选择第一个Full access service_account_file直接留空回车Edit advanced config选择No Use web browser因为我们有浏览器所以选择Yes

无视风险继续打开

在弹出的窗口中登录要绑定的Google账号成功后终端会提示Configure this as a Shared Drive (Team Drive) 这里根据实际情况选择,个人Drive就选择No之后就keep this remote

全部结束后终端会直接显示rclone的配置文件,或者输入rclone config file获取文件的路径再打开。

配置Cloudflare Worker

登录Cloudflare仪表盘,在存储和数据库下进入Workers KV。新建两个KV,记住这两个KV的Namespace ID。打开仓库下载

GitHubMusenxi/google-drive-s3Use Cloudflare Workers to turn your Google Drive into S3 object storage at no extra cost !TypeScript · ★ 1

打开根目录下的wrangler.jsonc编辑,name字段自定义这是创建的Worker的名字,下方AUTH_KV和FOLDER_CACHE对应的id填入上一步创建的两个KV的Namespace ID。

在终端中打开文件夹,

    # 1. S3 客户端用的密钥
    pnpx wrangler secret put ACCESS_KEY
    # 输入一个Access Key,例如:mygdrive123
    pnpx wrangler secret put SECRET_KEY
    # 输入一个Secret Key,例如:SuperStrongPassw0rd!@#456
    pnpx wrangler secret put REGION
    # 建议直接输入 auto (或诸如 us-east-1 其他的都可以)
    # 2. Google 凭证(从rclone 配置里复制)
    pnpx wrangler secret put GOOGLE_CLIENT_ID
    # 粘贴 client_id 的值
    pnpx wrangler secret put GOOGLE_CLIENT_SECRET
    # 粘贴 client_secret 的值
    pnpx wrangler secret put GOOGLE_REFRESH_TOKEN
    # 粘贴 refresh_token 的值(只粘贴 1// 开头的那一长串)
    # 3. 允许的 Bucket(非常重要!)
    pnpx wrangler secret put ALLOWED_BUCKETS
    # 输入你想使用的 bucket 名,用英文逗号分隔,例如:backup,photos,documents
    pnpx wrangler secret put PUBLIC_READ_BUCKETS
    # (可选)输入你想公开读取的 bucket 名,用英文逗号分隔,例如:backup,photos,documents

全部完成之后输入pnpx wrangler deploy发布。

然后就可以在Cloudflare的Workers中看到新发布的Worker了。

至此所有的创建流程就结束了。对应的workers.dev地址就是自定义 Endpoint

访问对应的地址显示Access denied to this bucket则说明配置成功。成功后会自动在Google Drive内创建和bucket同名的文件夹

Worker优选IP

因为workers.dev的地址在国内不能访问,而套上自己的域名则速度不怎么理想,这就需要使用优选IP。Worker配置优选IP非常简单,在我们创建的Worker内的设置界面,点击添加域和路由,添加路由,输入对应的域名后添加/*

进入DNS记录,添加DNS记录,对应域名CNAME到优选域名,记得代理状态选择仅DNS。

不好👎
好!👍
直连的下载速度也是非常快

比较著名的社区优选域名是

https://cf.090227.xyz/

配置CORS

如果要在前端调用则需要配置CORS进入域名内的规则→ 概述→ 响应标头转换规则内创建规则

选择自定义筛选表达式,当主机名 等于之前设置的自定义域名

设置新标头内添加静态标头然后添加对应的所需标头就行

到这里所有工作就完全结束了,不过要注意的是免费版的Workers单账号限制100000次日请求。

评论