Skip to content

SunshineList/cf-image

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

Cloudflare Worker 图床与图像管理器

这是一个 Cloudflare Worker 脚本,用于创建一个简单的、自托管的图床和图像画廊。它利用 Cloudflare R2 进行对象存储,并使用 Cloudflare KV 进行身份验证状态和密码存储。

✨ 功能特性

  • 安全的图像上传: 将图像直接上传到您的 Cloudflare R2 存储桶。
  • 密码保护: 管理后台受密码保护。
  • 初始设置: 引导式流程设置初始管理员密码。
  • 会话管理: 使用存储在 KV 中的会话 Cookie 进行身份验证。
  • 图像管理:
    • 在画廊中查看已上传的图像。
    • 复制图像的直接链接。
    • 删除图像。
  • 公共图像服务: 通过简洁的 URL (/images/{image_id})直接从 R2 提供图像。
  • 响应式用户界面: 管理后台设计旨在适应各种屏幕尺寸。
  • 分页加载: 在管理后台的图像画廊中分批加载图像。
  • 默认安全:
    • 密码使用 SHA-256 进行哈希处理。
    • 会话 Cookie 设置了 HttpOnlySecureSameSite=Lax 属性。

🚀 准备工作

在部署此 Worker 之前,您需要:

  1. 一个 Cloudflare 账户。
  2. Cloudflare R2 存储桶: 创建一个 R2 存储桶用于存放您的图像。
  3. Cloudflare KV 命名空间: 创建一个 KV 命名空间用于存储管理员密码哈希和活动会话。

⚙️ 配置参数

worker.js 文件顶部的以下常量需要配置。至关重要的是,IMAGE_BUCKET_BINDING_NAMEAUTH_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 小时。

部署指南

  1. 克隆/下载代码: 获取 worker.js 代码文件。
  2. 配置常量: 如果您计划使用与默认值不同的绑定名称,请修改 worker.js 文件顶部的配置常量(尽管在设置绑定时匹配默认值通常更容易)。
  3. 创建 Cloudflare Worker:
    • 登录到您的 Cloudflare 仪表板。
    • 导航到 "Workers 和 Pages"。
    • 点击 "创建应用程序" > "创建 Worker"。
    • 给您的 Worker 一个名称(例如,my-image-host)。
    • 点击 "部署"。
  4. 编辑 Worker 代码:
    • 点击 "配置 Worker" 或 "快速编辑"。
    • 将默认的 Worker 代码替换为您的 worker.js 文件的内容。
  5. 配置绑定 (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。

🛠️ 使用方法

  1. 初始密码设置:

    • 访问您的 Worker URL(例如,https://my-image-host.yourdomain.workers.dev)。
    • 您将被重定向到 /set-password 页面。
    • 输入并确认您的管理员密码。此密码将被哈希处理并存储在 KV 命名空间中。
  2. 登录:

    • 设置密码后,您将被重定向到 /login(或者您可以直接访问该页面)。
    • 输入管理员密码以登录。
  3. 管理后台 (/):

    • 登录后,您将进入主管理后台。
    • 上传图片: 使用表单选择并上传图片。成功上传后,将显示图片的直接链接。
    • 查看图片: 将显示已上传图片的画廊。
    • 图片操作:
      • 查看 (View): 在新标签页中打开图片。
      • 复制链接 (Copy Link): 将图片的直接 URL 复制到剪贴板。
      • 删除 (Delete): 从 R2 中删除图片。
    • 加载更多 (Load More): 如果图片很多,将出现 "加载更多" 按钮以进行分页。
    • 退出登录 (Logout): 点击页面顶部的 "退出登录" 按钮。
  4. 直接访问图片:

    • 可以通过路径 /images/{image_id} 直接访问图片(例如,https://my-image-host.yourdomain.workers.dev/images/your-image-uuid)。
    • {image_id} 是上传时生成的 UUID。

🔌 API 端点

  • GET /: 管理后台仪表盘 (需要身份验证)。
  • GET /set-password: 设置初始管理员密码的页面。
  • POST /set-password: 处理设置初始管理员密码的提交。
  • GET /login: 登录页面。
  • POST /login: 处理登录尝试并设置会话 Cookie。
  • POST /logout: 清除会话 Cookie 并注销用户。
  • POST /upload: 处理图像上传 (需要身份验证)。
  • GET /images/{image_id}: 公开提供特定图像。
  • GET /api/images: 为管理后台列出已上传的图像 (需要身份验证, 支持 limitcursor 查询参数)。
  • POST /delete/{image_id}: 删除特定图像 (需要身份验证)。

🛡️ 安全提示

  • 确保您的 Cloudflare 账户具有强大的安全措施(例如,双因素身份验证)。
  • 为图床选择一个强壮的管理员密码。
  • R2 存储桶和 KV 命名空间受 Cloudflare 基础设施的保护,但对 Worker 本身(及其绑定)的访问是通过您设置的管理员密码管理的。
  • 此脚本专为个人或小规模使用而设计。对于大型应用程序,请考虑更强大的安全措施和速率限制。

📜 安全与责任声明

  • 使用者责任: 本脚本按“原样”提供。您理解并同意,您对使用此脚本及其存储的任何内容负全部责任。请确保您拥有上传和分享内容的合法权利。
  • 安全实践: 强烈建议您定期检查和更新您的 Cloudflare Worker 代码(如果未来有更新版本或您自行修改),并确保您的 Cloudflare 账户、R2 存储桶和 KV 命名空间配置了适当的安全措施。管理员密码的强度和保密性至关重要。
  • 无担保: 作者不对本脚本的性能、可靠性、安全性或适用性作任何明示或暗示的保证。
  • 免责声明: 在任何情况下,作者均不对因使用或无法使用本脚本而导致的任何直接、间接、偶然、特殊、惩戒性或后果性损害(包括但不限于数据丢失、利润损失或业务中断)负责,即使已被告知此类损害的可能性。
  • 遵守法规: 您有责任确保您对本脚本的使用符合所有适用的地方、国家和国际法律法规。

个人想法,如果觉得还行的,麻烦给点小心心

About

基于CF的图床程序

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published