GitHub 文件服务器部署文档

GitHub 文件服务器部署文档

功能概述

  • 通过 GitHub API 上传文件到 GitHub 仓库或 Gist
  • 提供文件直链生成功能
  • 支持文件管理界面查看上传记录
  • 支持删除数据库记录
  • 支持删除真实文件
  • 支持API调用,详见 API 文档

部署步骤

1. 准备工作

  • 一个 GitHub 账号
  • 一个 Cloudflare 账号
  • 一个有效的 GitHub Personal Access Token (需要 gist 和 repo 权限)

2. 创建 Cloudflare Worker

  1. 登录 Cloudflare 控制台
  2. 进入 “Workers & Pages” 部分
  3. 点击 “Create application” → “Create Worker”
  4. 此仓库 gitfiles-plus.js 中的代码全部复制粘贴到 Worker 编辑器中

3. 配置环境变量

在 Worker 的 “Settings” → “Variables” 中添加以下环境变量:

变量名 描述 示例值
GH_TOKEN GitHub Personal Access Token ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
GH_DB D1 数据库绑定名称 (可选) DB
RAW_DOMAIN 私有仓库文件直链域名 (可选) raw.yourdomain.com

4. 初始化数据库 (可选)

如果需要使用数据库记录上传历史:

  1. 在 Cloudflare 控制台创建 D1 数据库
  2. 将数据库绑定到 Worker (GH_DB 变量)
  3. 首次访问 Worker 会自动创建所需表结构

5. 部署

点击 “Save and Deploy” 按钮完成部署

API 文档

上传文件

端点: POST /api/upload

参数:

  • upload-type: 必填,值为 gist 或 github
  • files: 必填,上传的文件(可多个)
  • gist-public: 可选,值为 on 或 off,仅当 upload-type 为 gist 时有效
  • existing-gist: 可选,值为已存在的 Gist ID,仅当 upload-type 为 gist 时有效
  • gh-user: 可选,值为 GitHub 用户名,仅当 upload-type 为 github 时有效
  • gh-repo: 可选,值为 GitHub 仓库名,仅当 upload-type 为 github 时有效
  • gh-branch: 可选,值为 GitHub 分支名,仅当 upload-type 为 github 时有效
  • gh-path: 可选,值为 GitHub 仓库路径,仅当 upload-type 为 github 时有效

命令示例

  • Gist 上传

    1
    2
    3
    4
    5
    6
    7
    curl -X POST \
    -H "Authorization: Bearer YOUR_GH_TOKEN" \
    -F "upload-type=gist" \
    -F "gist-public=on" \
    -F "files=@file1.txt" \
    -F "files=@file2.png" \
    http://your-domain.com/api/upload
  • GitHub 上传

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    curl -X POST \
    -H "Authorization: Bearer YOUR_GH_TOKEN" \
    -F "upload-type=github" \
    -F "gh-user=your_username" \
    -F "gh-repo=your_repo" \
    -F "gh-branch=main" \
    -F "gh-path=/subdir" \
    -F "files=@file1.txt" \
    -F "files=@file2.txt" \
    http://your-domain.com/api/upload

响应示例(200 OK):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
{
"filename": "文件名",
"filesize": "文件大小",
"upload_type": "github/gist",
"upload_time": "ISO时间戳",
"page_url": "页面地址",
"direct_url": "直链地址",
"gist_id": "Gist ID (仅gist)",
"gh_user": "GitHub用户 (仅github)",
"gh_repo": "仓库名 (仅github)"
},
//...其他文件结果
]

查询文件

端点: GET /api/qry

参数:

  • page=1: 分页参数(默认第 1 页)
  • all_pages=true: 查询所有页

命令示例

1
2
3
4
5
6
# 查询第一页
curl "http://your-domain.com/api/qry?page=1"
# 查询第二页
curl "http://your-domain.com/api/qry?page=2"
# 查询所有页
curl "https://your-domain.com/api/qry?all_pages=true"

响应示例(200 OK):

1
2
3
4
5
6
7
8
9
10
11
12
[
{
"id": "文件记录ID",
"filename": "文件名",
"filesize": "文件大小",
"upload_type": "github/gist",
"upload_time": "上传时间",
"page_url": "页面地址",
"direct_url": "直链地址"
},
//...其他记录
]

删除记录

端点: DELETE /api/rec/{ids}

参数: ids: 逗号分隔的记录 ID,如:1,2,3

命令示例:

1
curl -X DELETE "https://your-domain.com/api/rec/1,2,3"

响应示例(200 OK):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"operation": "删除记录",
"total": "总操作数",
"success_count": "成功数",
"failed_count": "失败数",
"results": [
{
"id": "记录ID",
"success": "true/false",
"filename": "文件名",
"upload_type": "类型",
"error": "错误信息 (失败时)"
}
//...其他结果
]
}

删除文件及记录

端点: DELETE /api/del/{ids}

参数: ids: 逗号分隔的记录 ID,如:1,2,3

命令示例:

1
2
3
curl -X DELETE \
-H "Authorization: Bearer YOUR_GH_TOKEN" \
"https://your-domain.com/api/del/1,2,3"

响应示例(200 OK):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"operation": "删除文件",
"total": "总操作数",
"success_count": "成功数",
"failed_count": "失败数",
"results": [
{
"id": "记录ID",
"success": "true/false",
"filename": "文件名",
"upload_type": "类型",
"error": "错误信息 (失败时)"
}
//...其他结果
]
}

前端界面

1. 主界面 (/)

  • 支持多文件上传
  • 支持拖放上传
  • 可选择上传到 Gist 或 GitHub
  • 显示上传结果

image.png

2. 文件管理界面 (/list)

  • 显示上传历史记录
  • 支持搜索和分页
  • 可删除数据库记录

image.png

注意事项

  1. GitHub API 有速率限制,请合理使用
  2. 私有仓库需要配置 RAW_DOMAIN 环境变量才能生成直链
  3. 上传到 GitHub 仓库需要确保 Token 有对应仓库的写入权限
  4. 文件大小限制取决于 Cloudflare Worker 的限制 (默认约 10MB)
  5. 暂未添加鉴权功能,切勿用于公益访问,待后期增加 api 鉴权

常见问题

Q: 上传失败显示 “Token 无效或权限不足 “
A: 检查 GH_TOKEN 是否有正确的权限 (gist 和 repo),并确保对目标仓库有写入权限

Q: 私有仓库直链无法访问
A: 需要先部署 cmliu/CF-Workers-Raw 项目,绑定自定义域名,然后在本项目设置 RAW_DOMAIN 环境变量,指向 raw 项目绑定的自定义域名

Q: 数据库记录不显示
A: 检查是否已正确绑定 D1 数据库到 Worker,并确保 GH_DB 变量名称匹配

#cloudflare #github