Files
CloudFlare-ImgBed/README.md
2024-08-19 18:40:23 +08:00

9.6 KiB
Raw Blame History

CloudFlare-ImgBed

注意:本仓库为Telegraph-Image项目的重制版,如果你觉得本项目不错,在支持本项目的同时,也请支持原项目。

1.Introduction

cf-pages/Telegraph-Image项目的重制版,实现了登录鉴权上传图片预览一键切换上传方式拖拽上传粘贴上传)、多文件上传整体复制多格式复制等功能。

2.Features

  • 开源

    • 前端开源(可自行修改、打包使用)
  • 炫酷的动效(

    • 流畅丝滑的过渡动画~
    • 上传文件实现呼吸灯效果
  • 人性化上传

    • 支持一键切换上传方式(拖拽点击、粘贴
    • 支持批量上传不限同时选择文件数量但为了保证稳定性同时处于上传状态的文件最多为10个
    • 上传显示实时上传进度
    • 上传后图片无需手动点击,可直接展示在管理页面中
  • 多样化复制

    • 支持整体复制和单独复制(整体复制即将所有链接通过换行串联起来后复制)
    • 支持MarkDown、HTML和原始链接三种格式复制
  • 支持身份认证、防滥用

    • 支持Web和API上传认证感谢hl128k
    • 支持访问域名限制(感谢hl128k
  • 一些小功能

    • 支持随机图API从图床中随机返回一张图片

3.Deployment

3.1直接使用

部署方式环境变量和原仓库保持一致。

3.1.1提前准备

  • 部署于Cloudflare

    只需准备一个Cloudflare账户,然后按照3.1.2.1节的步骤即可完成部署。

  • 部署于服务器

    如果Cloudflare的KV数据库访问次数限制不能满足你的需求,并且你拥有自己的服务器,可以参照3.1.2.2节的教程在服务器上模拟Cloudflare的环境并开放对应的端口访问服务。

    注意由于服务器操作系统、硬件版本复杂多样,相关教程无法确保适合每一位用户遇到报错请尽量利用搜索引擎解决无法解决也可以提issue寻求帮助。

3.1.2手把手教程

3.1.2.1部署于Cloudflare

依托于CF的强大能力只需简单 3 步,即可部署本项目,拥有自己的图床。

  1. Fork 本仓库 (注意:必须使用 Git 或者 Wrangler 命令行工具部署后才能正常使用,文档)

  2. 打开 Cloudflare Dashboard进入 Pages 管理页面,选择创建项目,选择连接到 Git 提供程序

1

  1. 按照页面提示输入项目名称,选择需要连接的 git 仓库,点击部署站点即可完成部署
3.1.2.2部署于服务器
  1. 安装服务器操作系统对应的node.js,经测试v22.5.1版本可以正常使用。安装教程自行search

  2. 切换到项目根目录,运行npm install,安装所需依赖。

  3. 在项目根目录下新建wrangler.toml配置文件,其内容为项目名称,环境变量等,可根据后文环境变量配置进行个性化修改。(详情参见官方文档Configuration - Wrangler (cloudflare.com)

    配置文件样例:

    name = "cloudflare-imgbed"
    compatibility_date = "2024-07-24"
    
    [vars]
    ModerateContentApiKey = "your_key"
    AllowRandom = "true"
    BASIC_USER = "user"
    BASIC_PASS = "pass"
    
  4. 在项目根目录下运行npm run start,至此,正常情况下项目已经成功部署。

    程序默认运行在8080端口上,使用nginx等服务器反代127.0.0.1:8080即可外网访问服务。如需修改端口,可在package.json中修改start脚本的port参数(如下图)。

    正常启动,控制台输出如下:

3.1.3后台管理

  1. 默认关闭,开启方式如下:
    • 创建一个新的KV数据库
    • 进入项目对应设置->函数->KV 命名空间绑定->编辑绑定->变量名称,填写img_urlKV命名空间选择刚才创建好的KV数据库
    • 设置好后,访问http(s)://你的域名/admin即可进入后台管理页面
  2. 管理员认证,默认关闭,开启方式如下:
    • 项目对应设置->环境变量->为生产环境定义变量->编辑变量 ,添加BASIC_USER作为管理员用户名,BASIC_PASS作为管理员登录密码

3.1.4图片审查

支持成人内容审查和自动屏蔽,开启步骤如下:

  • 前往https://moderatecontent.com/ 注册并获得一个免费的用于审查图像内容的 API key
  • 打开 Cloudflare Pages 项目的管理页面,依次点击设置环境变量添加环境变量
  • 添加一个变量名称ModerateContentApiKey为第一步获得的API key,点击保存即可

3.1.5Web和API上传认证

环境变量增加认证码AUTH_CODE,值为你想要设置的认证码。

Web端在登录页面输入你的认证码即可登录使用。

API格式

接口名称 /upload
接口功能 上传图片或视频
请求方法 POST
请求参数 Query参数
authCodestring类型即为你设置的认证码
Body参数(application/form-data)
filefile类型你要上传的文件
返回响应 data[0].src为获得的图片链接(注意不包含域名,需要自己添加)

请求示例

curl --location --request POST 'https://your.domain/upload?authCode=your_authCode' \

--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \

--form 'file=@"D:\\杂文件\\壁纸\\genshin109.jpg"'

响应示例

[
    {
        "src": "/file/738a8aaacf4d88d1590f9.jpg"
    }
]

3.1.6访问域名限制

环境变量增加ALLOWED_DOMAINS,多个允许的域名用英文,分割,如:域名.xyz,域名.cloudns.be,域名.pp.ua

3.1.7远端遥测

便于开发者进行bug的捕捉和定位但是过程中可能收集到访问链接、域名等信息,如您不愿意泄露类似信息给项目开发者,可在环境变量中添加disable_telemetrytrue来退出遥测。

3.1.8随机图API

接口名称 /random
接口功能 从图床中随机返回一张图片的链接(注意会消耗列出次数)
前置条件 设置AllowRandom环境变量,值为true
请求方法 GET
请求参数 Query参数
type:设为img时直接返回图片此时form不生效设为url时返回完整url链接否则返回随机图的文件路径。
form:设为text时直接返回文本否则返回json格式内容。
响应格式 1、当typeimg时:
返回格式为image/jpeg
2、当type为其他值时:
form不是text返回JSON格式内容data.url为返回的链接/文件路径。
否则,直接返回链接/文件路径。

请求示例

curl --location --request GET 'https://your.domain/random' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)'

响应示例

{
    "url": "/file/4fab4d423d039b4665a27.jpg"
}

3.1.9注意

修改环境变量后需要重新部署才能生效!

3.2定制化修改

按照3.1步骤部署完成后,前往仓库MarSeventh/Sanyue-ImgHub按照操作说明进行DIY和打包操作最后将打包好的/dist目录中的内容替换到该仓库的根目录下即可(复制+替换)。

4.TODO

4.1Add Features💕

  1. 增加粘贴图片上传功能2024.7.22已完成)
  2. 增加markdown、html等格式链接复制功能2024.7.21已完成)
  3. 上传页面增加管理端入口2024.7.21已完成)
  4. 增加用户个性化配置接口
  5. 增加随机图API2024.7.25已完成)

4.2Fix Bugs👻

  1. 修复API上传无法直接展示在后台的问题2024.7.25已修复)

5.Q&A

5.1未设置ALLOWED_DOMAINS,但无法跨域访问?

  • 请检查你的cloudflare防火墙设置例如hotlink保护是否开启
  • 参见Issue #8

6.Tips

前端开源,参见MarSeventh/Sanyue-ImgHub项目。

如果觉得项目不错希望您能给个免费的star,非常感谢!

7.Star History

Star History Chart