起因是收到了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服务,碰巧的是三个月前就有开发者开源了,就不用自己动手从零开始。
我在此仓库的基础上添加了允许公开读取容器的选项,更加适合作为普通图床的存储容器。
那么就开始这篇教程。
获取API Token
该项目利用rclone获取Google Drive的API,rclone官网有详细的步骤根据官网的步骤在Google API控制台进行操作
- 新建一个项目,接着点击启用API和服务

- 搜索google drive api,点击进入选择启用

- 在左侧栏选择凭证,如果显示的跟下面一样则点击进入配置


- 在OAuth权限请求页面内点击数据访问,点击添加或移除范围。

- 在弹出的右侧栏内找到底部的
手动添加范围在文本框内填入https://www.googleapis.com/auth/docs,https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/drive.metadata.readonly,点击添加到表并更新 - 点击目标对象,在下方的测试用户内点击
Add users输入自己的Google账号。 - 在左侧栏选择概览,创建OAuth客户端,应用类型选择桌面应用,点击创建。
- 记住弹出的界面中的客户端 ID和客户端密钥,或者直接点击下载JSON
- 点击目标对象,发布应用
接着下载安装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。打开仓库下载
打开根目录下的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。



比较著名的社区优选域名是
配置CORS
如果要在前端调用则需要配置CORS进入域名内的规则→ 概述→ 响应标头转换规则内创建规则
选择自定义筛选表达式,当主机名 等于之前设置的自定义域名
设置新标头内添加静态标头然后添加对应的所需标头就行
到这里所有工作就完全结束了,不过要注意的是免费版的Workers单账号限制100000次日请求。