✨ Cloudflare Pages + Telegraph Image 搭建免费无限图床

前言

免费图片托管解决方案,使用 Cloudflare Pages 和 Telegraph 搭建一个免费无限图床。

由于原有的 Telegraph API 已经被关闭,所以需要使用 Telegraph Image 这个第三方库来替代,按照文档中的部署要求设置 TG_Bot_TokenTG_Chat_ID,否则无法上传图片。

📖 准备工作

在开始搭建之前,我们需要准备以下工具:

  • Cloudflare 账号
  • Telegram 账号
  • 一个域名(可选)
  • 一个 GitHub 账号

获取 Telegram Bot_Token 和 Chat_ID

  1. 打开 Telegram,搜索 @BotFather 发送命令 /newbot,根据提示输入 Bot 名称和用户名,创建成功后会生成一个 Bot_Token,复制保存下来。
  2. 创建一个频道,把新建的 Bot 添加到频道中并设置为管理员。
  3. 在频道中发送一条消息,转发到 @VersaToolsBot 机器人中来获取 Chat_ID

环境变量 示例值 说明
TG_Bot_Token 123468:AAxxxGKrn5 @BotFather 获取的 Telegram Bot Token
TG_Chat_ID -123456789 频道的 ID,确保 TG Bot 是该频道或群组的管理员

🧐 部署教程

  1. 下载或 Fork 项目到自己的 GitHub 账号中,仓库地址
  2. 打开 Cloudflare Pages,点击 Add a site,选择 Connect to GitHub,选择刚刚 Fork 的仓库,点击 Connect
  3. 默认会自动创建一个 main 分支的部署,点击 Deploy site,等待部署完成。
  4. 部署完成后,点击 Settings,在 Environment variables 中添加两个环境变量,把上面的 TG_Bot_TokenTG_Chat_ID 复制过来,然后点击 Save
  5. 重新部署一次,等待部署完成后,点击 Site URL,即可访问你的图床。

使用教程

  1. 打开你的图床地址,例如:https://telegraph-image.pages.dev/
  2. 点击 Upload,选择你要上传的图片,点击 Upload
  3. 等待上传完成后,点击 Copy Link,即可复制图片链接。

额外功能

  1. 自定义域名:

    如果你有一个域名,可以通过以下步骤来绑定自定义域名:

    1. 在 Cloudflare Pages 中点击 Settings,在 Custom Domains 中添加你的域名。
    2. 在 Cloudflare 中添加一个 CNAME 记录,指向你的 Cloudflare Pages 域名。
    3. 等待 DNS 解析完成后,即可通过你的域名访问图床。

🎉 结束语

以上就是使用 Cloudflare Pages 和 Telegraph Image 搭建免费无限图床的教程,希望对大家有所帮助。

const data = [
{
appId: “”,
filters: [{ key: ‘’, values: undefined }, { key: ‘001’, values: undefined }],
id: “”,
metricsName: “”,
metricsSetId: “”,
tags: [{ key: ‘’, values: undefined }],
},
{
appId: “111”,
filters: [{ key: ‘k’, values: 11 }, { key: ‘001’, values: 11 }],
id: “222”,
metricsName: “333”,
metricsSetId: “444”,
tags: [{ key: ‘1’, values: undefined }],
},
];

以 JS 根据给出的这个数据结构进行校验,如果 appIdfiltersidmetricsNamemetricsSetIdtags 都不为空,则返回 true,否则返回 false,其中 filters 和 key 和 values 不能为空,tags 的 key 不能为空,但 values 可以为空.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function validateData(data) {
const { appId, filters, id, metricsName, metricsSetId, tags } = data;
if (!appId || !filters || !id || !metricsName || !metricsSetId || !tags) {
return false;
}
if (filters.some((filter) => !filter.key || !filter.values)) {
return false;
}
if (tags.some((tag) => !tag.key)) {
return false;
}
return true;
}

// Example usage:
const data = {
appId: '123',
filters: [{ key: '001', values: ['value1', 'value2'] }],
id: '456',
metricsName: 'metrics',
metricsSetId: '789',
tags: [{ key: 'tag1', values: ['value1', 'value2'] }],
};

console.log(validateData(data)); // Output: true