这是一个 Cloudflare Worker 脚本,用于创建一个简单的、自托管的图床和图像画廊。它利用 Cloudflare R2 进行对象存储,并使用 Cloudflare KV 进行身份验证状态和密码存储。
- 安全的图像上传: 将图像直接上传到您的 Cloudflare R2 存储桶。
- 密码保护: 管理后台受密码保护。
- 初始设置: 引导式流程设置初始管理员密码。
- 会话管理: 使用存储在 KV 中的会话 Cookie 进行身份验证。
- 图像管理:
- 在画廊中查看已上传的图像。
- 复制图像的直接链接。
- 删除图像。
- 公共图像服务: 通过简洁的 URL (
/images/{image_id})直接从 R2 提供图像。 - 响应式用户界面: 管理后台设计旨在适应各种屏幕尺寸。
- 分页加载: 在管理后台的图像画廊中分批加载图像。
- 默认安全:
- 密码使用 SHA-256 进行哈希处理。
- 会话 Cookie 设置了
HttpOnly、Secure和SameSite=Lax属性。
在部署此 Worker 之前,您需要:
- 一个 Cloudflare 账户。
- Cloudflare R2 存储桶: 创建一个 R2 存储桶用于存放您的图像。
- Cloudflare KV 命名空间: 创建一个 KV 命名空间用于存储管理员密码哈希和活动会话。
worker.js 文件顶部的以下常量需要配置。至关重要的是,IMAGE_BUCKET_BINDING_NAME 和 AUTH_KV_BINDING_NAME 必须与您在 Cloudflare Worker 设置中配置的绑定名称完全匹配。
| 常量名 | 默认值 | 描述 |
|---|---|---|
IMAGE_BUCKET_BINDING_NAME |
'IMAGE_BUCKET' |
您的 R2 存储桶的绑定名称。此变量名将用于从代码中访问 R2 存储桶。 |
AUTH_KV_BINDING_NAME |
'AUTH_KV' |
您的 KV 命名空间的绑定名称。此变量名将用于从代码中访问 KV 存储。 |
SESSION_COOKIE_NAME |
'img_session_id' |
用于身份验证的会话 Cookie 的名称。 |
SESSION_EXPIRY_SECONDS |
3600 * 24 (86400) |
登录会话保持有效的持续时间(以秒为单位)。默认为 24 小时。 |
- 克隆/下载代码: 获取
worker.js代码文件。 - 配置常量: 如果您计划使用与默认值不同的绑定名称,请修改
worker.js文件顶部的配置常量(尽管在设置绑定时匹配默认值通常更容易)。 - 创建 Cloudflare Worker:
- 登录到您的 Cloudflare 仪表板。
- 导航到 "Workers 和 Pages"。
- 点击 "创建应用程序" > "创建 Worker"。
- 给您的 Worker 一个名称(例如,
my-image-host)。 - 点击 "部署"。
- 编辑 Worker 代码:
- 点击 "配置 Worker" 或 "快速编辑"。
- 将默认的 Worker 代码替换为您的
worker.js文件的内容。
- 配置绑定 (Bindings):
- 在您的 Worker 设置中,转到 "设置" 选项卡,然后选择 "变量"。
- R2 存储桶绑定 (R2 Bucket Bindings):
- 滚动到 "R2 存储桶绑定" 并点击 "添加绑定"。
- 变量名称 (Variable name): 输入
IMAGE_BUCKET_BINDING_NAME的值(例如,IMAGE_BUCKET)。 - R2 存储桶 (R2 bucket): 选择您先前创建的 R2 存储桶。
- KV 命名空间绑定 (KV Namespace Bindings):
- 滚动到 "KV 命名空间绑定" 并点击 "添加绑定"。
- 变量名称 (Variable name): 输入
AUTH_KV_BINDING_NAME的值(例如,AUTH_KV)。 - KV 命名空间 (KV namespace): 选择您先前创建的 KV 命名空间。
- 保存并部署您的 Worker。
-
初始密码设置:
- 访问您的 Worker URL(例如,
https://my-image-host.yourdomain.workers.dev)。 - 您将被重定向到
/set-password页面。 - 输入并确认您的管理员密码。此密码将被哈希处理并存储在 KV 命名空间中。
- 访问您的 Worker URL(例如,
-
登录:
- 设置密码后,您将被重定向到
/login(或者您可以直接访问该页面)。 - 输入管理员密码以登录。
- 设置密码后,您将被重定向到
-
管理后台 (
/):- 登录后,您将进入主管理后台。
- 上传图片: 使用表单选择并上传图片。成功上传后,将显示图片的直接链接。
- 查看图片: 将显示已上传图片的画廊。
- 图片操作:
- 查看 (View): 在新标签页中打开图片。
- 复制链接 (Copy Link): 将图片的直接 URL 复制到剪贴板。
- 删除 (Delete): 从 R2 中删除图片。
- 加载更多 (Load More): 如果图片很多,将出现 "加载更多" 按钮以进行分页。
- 退出登录 (Logout): 点击页面顶部的 "退出登录" 按钮。
-
直接访问图片:
- 可以通过路径
/images/{image_id}直接访问图片(例如,https://my-image-host.yourdomain.workers.dev/images/your-image-uuid)。 {image_id}是上传时生成的 UUID。
- 可以通过路径
GET /: 管理后台仪表盘 (需要身份验证)。GET /set-password: 设置初始管理员密码的页面。POST /set-password: 处理设置初始管理员密码的提交。GET /login: 登录页面。POST /login: 处理登录尝试并设置会话 Cookie。POST /logout: 清除会话 Cookie 并注销用户。POST /upload: 处理图像上传 (需要身份验证)。GET /images/{image_id}: 公开提供特定图像。GET /api/images: 为管理后台列出已上传的图像 (需要身份验证, 支持limit和cursor查询参数)。POST /delete/{image_id}: 删除特定图像 (需要身份验证)。
- 确保您的 Cloudflare 账户具有强大的安全措施(例如,双因素身份验证)。
- 为图床选择一个强壮的管理员密码。
- R2 存储桶和 KV 命名空间受 Cloudflare 基础设施的保护,但对 Worker 本身(及其绑定)的访问是通过您设置的管理员密码管理的。
- 此脚本专为个人或小规模使用而设计。对于大型应用程序,请考虑更强大的安全措施和速率限制。
- 使用者责任: 本脚本按“原样”提供。您理解并同意,您对使用此脚本及其存储的任何内容负全部责任。请确保您拥有上传和分享内容的合法权利。
- 安全实践: 强烈建议您定期检查和更新您的 Cloudflare Worker 代码(如果未来有更新版本或您自行修改),并确保您的 Cloudflare 账户、R2 存储桶和 KV 命名空间配置了适当的安全措施。管理员密码的强度和保密性至关重要。
- 无担保: 作者不对本脚本的性能、可靠性、安全性或适用性作任何明示或暗示的保证。
- 免责声明: 在任何情况下,作者均不对因使用或无法使用本脚本而导致的任何直接、间接、偶然、特殊、惩戒性或后果性损害(包括但不限于数据丢失、利润损失或业务中断)负责,即使已被告知此类损害的可能性。
- 遵守法规: 您有责任确保您对本脚本的使用符合所有适用的地方、国家和国际法律法规。
个人想法,如果觉得还行的,麻烦给点小心心