基于Telegraph的免费图床

项目来自GitHub
目前有 1.6k Fork 和 1.1k Star

可以看项目的 README.md 操作，也可以看本帖子操作

准备工作

一个 GitHub 账号 没有也行

一个 cloudflare 账号

一个域名并且已经托管到 cloudflare 没托管也行

打开 GitHub 登录，找到项目，或者点上面的链接
点击 Fork

直接 Create fork

然后到 cloudflare，点击Workers 和 Pages

点击右边区域的创建应用程序

点击 pages，然后点击连接到 git，授权

选择刚才 fork 的项目，点击开始设置

都不用改，点保存并部署

如果没有 GitHub 账号，可以下载下，选择下面的使用直接上传创建，后面的部署都是一样的

部署完以后回到Workers 和 Pages
会发现右边多了个项目，自动分配了个.pages.dev 的域名

这个域名经过测试，不挂代理打不开
所以要自定义域名
点击项目名称，进入后点击自定义域，点击下面的设置自定义域

输入自己的域名点击继续

如果域名托管到 cloudflare，那么会自动帮你添加 dns，然后点击激活域
如果是托管到其它，则需要根据提示手动添加，添加完后点击激活域

完成后，等待域名生效就行

访问自定义的域名

上传图片试试

如果提示出错了，重新上传就行
点击右边按钮复制路径，右边红色返回按钮，返回上传界面

这时候就有人说了，如果我前面上传的图片要用，但是我没有保存路径怎么办

回到 cloudflare，点击 KV

点击创建命名空间

名称自己起，点击添加

点击项目的设置里的函数

往下拉，找到这个

变量名称设置img_url，KV 空间填自己刚才设置的，点击保存

回到项目，点击最新部署的那次的右边的三个点，选择重新部署

打开 自定义的域名 /admin
测试时发现上传图片后需要访问一下才能在管理后台显示，不知道是我网速慢还是 bug，还是本来就是这样设定的

管理后台有了，但是没有设置密码，这样有些不安全，图片链接暴漏了，别人有可能会找到管理地址

回到项目，点到设置 > 环境变量 > 编辑变量，添加用户名BASIC_USER和密码BASIC_PASS

保存后重新部署一下
再来到管理界面，输入刚才设置的登录账号和密码登录

官方文档也写了其它的登录方式

当然你也可以不设置这两个值，这样访问后台管理页面时将无需验证，直接跳过登录步骤，这一设计使得你可以结合 Cloudflare Access 进行使用，实现支持邮件验证码登录，Microsoft 账户登录，Github 账户登录等功能，能够与你域名上原有的登录方式所集成，无需再次记忆多一组后台的账号密码，添加 Cloudflare Access 的方式请参考官方文档，注意需要保护路径包括 /admin 以及 /api/manage/*

根据文档，还能开启图片审查，但是我没有试，感兴趣的可以自己试一下

限制

由于图片文件实际存储于 Telegraph，Telegraph 限制上传的图片大小最大为 5MB

由于使用 Cloudflare 的网络，图片的加载速度在某些地区可能得不到保证

Cloudflare Function 免费版每日限制 100,000 个请求（即上传或是加载图片的总次数不能超过 100,000 次）如超过可能需要选择购买 Cloudflare Function 的付费套餐，如开启图片管理功能还会存在 KV 操作数量的限制，如超过需购买付费套餐

Cloudflare KV 每天只有 1000 次的免费写入额度，每有一张新的图片加载都会占用该写入额度，如果超过该额度，图片管理后台将无法记录新加载的图片

每天最多 100,000 次免费读取操作，图片每加载一次都会占用该额度（在没有缓存的情况下，如果你的域名在 Cloudflare 开启了缓存，当缓存未命中时才会占用该额度），超过黑白名单等功能可能会失效

每天最多 1,000 次免费删除操作，每有一条图片记录都会占用该额度，超过将无法删除图片记录

每天最多 1,000 次免费列出操作，每打开或刷新一次后台 /admin 都会占用该额度，超过将进行后台图片管理

绝大多数情况下，该免费额度都基本够用，并且可以稍微超出一点，不是已超出就立马停用，且每项额度单独计算，某项操作超出免费额度后只会停用该项操作，不影响其他的功能，即即便我的免费写入额度用完了，我的读写功能不受影响，图片能够正常加载，只是不能在图片管理后台看到新的图片了。

如果你的免费额度不够用，可以自行向 Cloudflare 购买 Cloudflare Workers 的付费版本，每月 $5 起步，按量收费，没有上述额度限制

另外针对环境变量所做的更改将在下次部署时生效，如更改了环境变量，针对某项功能进行了开启或关闭，请记得重新部署。