Cloudflare Pages + 电报搭建自己的图床
#Cloudflare Pages 部署
访问 CloudFlare ImgBed 项目
点击右上角的 "Fork" 按钮
选择您的 GitHub 账户
确认 Fork 完成


#第二步:创建 Pages 项目
#2.1 访问 Cloudflare Dashboard
登录 Cloudflare Dashboard
选择左侧菜单的 "计算和AI" -> "Workers & Pages"
点击 "创建应用程序"
在最下方
Looking to deploy Pages?选择 "Get started"在 "导入现有 Git 存储库" 处点击 "开始使用"




填写配置并部署:


#第三步:配置数据库
数据库用于存储文件元数据,是必需的组件,可选数据库为 KV 数据库和 D1 数据库。两者对比如下表所示,根据自己使用场景从其中选择一种配置即可。
特点KV 数据库D1 数据库读写性能高较低免费额度少多大文件上传支持不支持
KV 数据库和 D1 数据库只需要配置其中一个即可,不需要同时配置两个!建议根据上表选择适合自己的数据库类型。
#创建 D1 数据库
在 Cloudflare Dashboard 中选择 "存储和数据库"
点击 "D1 SQL 数据库"
点击 "创建数据库"
输入数据库名称:
img_d1(建议使用此名称)点击 "创建"


名称建议:img_d1

#初始化 D1 数据库
创建完成后,点击进入数据库详情页
选择 "控制台" 选项卡
在 SQL 输入框中粘贴并执行注释区域以下的内容(见项目仓库)
点击 "执行"
代码地址: https://github.com/MarSeventh/CloudFlare-ImgBed/blob/main/database/init.sql
CREATE TABLE IF NOT EXISTS files (
id TEXT PRIMARY KEY,
value TEXT,
metadata TEXT NOT NULL,
file_name TEXT,
file_type TEXT,
file_size TEXT,
upload_ip TEXT,
upload_address TEXT,
list_type TEXT,
timestamp INTEGER,
label TEXT,
directory TEXT,
channel TEXT,
channel_name TEXT,
tg_file_id TEXT,
tg_chat_id TEXT,
tg_bot_token TEXT,
is_chunked BOOLEAN DEFAULT FALSE,
tags TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS settings (
key TEXT PRIMARY KEY,
value TEXT NOT NULL,
category TEXT,
description TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS index_operations (
id TEXT PRIMARY KEY,
type TEXT NOT NULL,
timestamp INTEGER NOT NULL,
data TEXT NOT NULL,
processed BOOLEAN DEFAULT FALSE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS index_metadata (
key TEXT PRIMARY KEY,
last_updated INTEGER,
total_count INTEGER DEFAULT 0,
last_operation_id TEXT,
chunk_count INTEGER DEFAULT 0,
chunk_size INTEGER DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS other_data (
key TEXT PRIMARY KEY,
value TEXT NOT NULL,
type TEXT,
description TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_files_timestamp ON files(timestamp DESC);
CREATE INDEX IF NOT EXISTS idx_files_directory ON files(directory);
CREATE INDEX IF NOT EXISTS idx_files_channel ON files(channel);
CREATE INDEX IF NOT EXISTS idx_files_file_type ON files(file_type);
CREATE INDEX IF NOT EXISTS idx_files_upload_ip ON files(upload_ip);
CREATE INDEX IF NOT EXISTS idx_files_created_at ON files(created_at DESC);
CREATE INDEX IF NOT EXISTS idx_files_tags ON files(tags);
CREATE INDEX IF NOT EXISTS idx_settings_category ON settings(category);
CREATE INDEX IF NOT EXISTS idx_index_operations_timestamp ON index_operations(timestamp);
CREATE INDEX IF NOT EXISTS idx_index_operations_processed ON index_operations(processed);
CREATE INDEX IF NOT EXISTS idx_index_operations_type ON index_operations(type);
CREATE INDEX IF NOT EXISTS idx_other_data_type ON other_data(type);
CREATE TRIGGER IF NOT EXISTS update_files_updated_at
AFTER UPDATE ON files
BEGIN
UPDATE files SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
END;
CREATE TRIGGER IF NOT EXISTS update_settings_updated_at
AFTER UPDATE ON settings
BEGIN
UPDATE settings SET updated_at = CURRENT_TIMESTAMP WHERE key = NEW.key;
END;
CREATE TRIGGER IF NOT EXISTS update_index_metadata_updated_at
AFTER UPDATE ON index_metadata
BEGIN
UPDATE index_metadata SET updated_at = CURRENT_TIMESTAMP WHERE key = NEW.key;
END;
CREATE TRIGGER IF NOT EXISTS update_other_data_updated_at
AFTER UPDATE ON other_data
BEGIN
UPDATE other_data SET updated_at = CURRENT_TIMESTAMP WHERE key = NEW.key;
END;
#绑定 D1 到项目
返回您的 Pages 项目
选择 "设置" → "绑定"
点击 "添加" → "D1 数据库"
填写绑定信息:
变量名称:
img_d1(必须是这个名称)D1 数据库:选择刚创建的数据库
点击 "保存"
#第四步:重新部署
绑定数据库后需要重新部署以生效:
进入项目的 "部署" 页面
找到最新的部署记录
点击右侧的 "..." 菜单
选择 "重试部署"
等待部署完成
#第五步:登录网页进行配置
复制Page的地址

#管理后台默认无需密码,登录后请及时设置管理员用户名和密码。
网页右下角:


在安全设置里设置用户名密码

#添加上传渠道

我这里使用了电报渠道。

token 找 botfather 获取。 id使用这个方法获取: https://gist.github.com/nafiesl/4ad622f344cd1dc3bb1ecbe468ff9f8a


配置好之后就可以通过网页上传了。

#第六步:配置picgo
创建一个api token

下载这个插件
https://github.com/xlenco/picgo-plugin-web-uploader-custom-url-prefix
可以通过 clone 的方式下载,也可以直接下载zip包然后解压
当然,也可以使用下面这个云盘链接
https://www.123865.com/s/Y4kqVv-Ywrbv?pwd=znoG#
打开picgo 导入插件

配置插件

api地址:
图床域名/upload?authCode=创建的token&uploadFolder=
post 参数: file
json 路径: 0.src
自定义图盘前缀:图床域名
上传测试


作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
