English | 简体中文
CF-R2-ImageBed 是基于 Cloudflare R2 对象存储的图像托管服务。支持使用 PicGo 上传。
Cloudflare R2 提供免费层。
本仓库包含 3 个部分:
- 一个 Worker 处理将文件上传到 R2 存储或从中获取文件的请求。
- 一个 Python 脚本,作为向 Worker 上传文件的 demo。
- 一个 Page Function,用于从 R2 存储桶中提供文件
当您将 Worker 部署到 Cloudflare 时,他们将其托管在域名 <worker name>.<worker subdomain>
上。对于我,它是 upload-blog.caomingjun.workers.dev
。
Key 是一个字符串,用于区分 R2 中的对象。本项目使用路径名作为键。例如,PUT https://upload-blog.caomingjun.workers.dev/foo/bar.png
将文件以 key foo/bar.png
上传。
如果上传成功,worker 的返回值会包含一个可以访问文件的 URL。格式是 <ROOT_URL><key>
你应该:
- 拥有 Cloudflare Workers 帐户
- 为您的 Cloudflare 帐户启用 R2 并创建一个存储桶
- 在您的计算机上安装 Python3 和
pip
另外,准备以下资源:
- 具有
Edit Cloudflare Workers
权限的 Cloudflare API 令牌
警告:GFW 疑似对 workers.dev
进行了 SNI 封锁。你可能还需要一个域名进行绑定。
首先,fork 这个仓库。
您可能希望在源代码中更改这些内容:
- 在
worker/src/config.ts
中的allowPaths
。与allowPaths
的所有路径都不匹配的上传请求将被拒绝。 - 在
worker/src/config.ts
中的allowDelete
。如果设置为false
,则删除请求、覆盖原有文件的写入将被拒绝。 worker/wrangler.toml
中的name = "upload-blog"
。 它告诉 Cloudflare 将 Worker 部署到upload-blog.<your worker subdomain>
。你可以更改它。
在新的仓库中,创建这些 Secret:
BUCKET_NAME
:您在先决条件中创建的 R2 存储桶的名称。CF_API_TOKEN
:具有Edit Cloudflare Workers
权限的 Cloudflare API 令牌。CLOUDFLARE_ACCOUNT_ID
:您的 Cloudflare 帐户 ID,可以在您的 Workers dashboard 中找到。ROOT_URL
:您要用于访问您上传的文件的 URL 的根。您可以选择您部署 Worker 的 URL,比如对于我是https://upload-blog.caomingjun.workers.dev/
。不要漏掉最后的/
。UPLOAD_SECRET
:类似于密码,以避免有人将文件上传到您的存储桶。你可以使用任何你喜欢的字符串。
然后运行 workflow deploy
。您可能需要先为仓库启用 Action。
我们建议您使用我们的 PicGo 插件进行上传,因为 PicGo 支持许多编辑器,例如 Typora 和 VSCode。PicGo 也有一个 GUI 版本。
你也可以使用我们的 Python 上传脚本,它支持 Typora。或者你也可以自己写一个。
当有人访问您页面中的指定 URL 时,Cloudflare Pages Functions 允许运行 Worker。
您可以参考 /page-function/[[path]].ts
。有关 Cloudflare Pages Functions 的用法和工作原理,请参阅 Cloudflare Pages Functions 文档.
- 完成 Pages Functions。(需要等待 Cloudflare 在 Pages Functions 中支持 R2 绑定)
- Python 脚本支持 Typora 图片上传。
- 在放入存储同之前检查桶中是否有使用相同键的对象。
- PicGo 插件。
- 2022-06-02: 增加获取信息、删除功能;在覆写之前进行检查;存储
Content-Type
。 - 2022-08-09: 增加 Pages Functions。
Cloudflare 是 Cloudflare, Inc. 拥有的商标。
Cloudflare 没有参与该项目,也没有审查或批准该项目。