环境要求

各组件运行环境与依赖

Python 工具

组件 最低版本 依赖
CLI 工具 (cli/) Python 3.8+ requests
聚合 GUI (app/) Python 3.8+ requeststkinter(Linux 需 apt install python3-tk
独立 GUI Python 3.8+ requeststkinter(Linux 需 apt install python3-tk
增强模式 Python 3.8+ requests + curl_cffi

安装依赖

# 使用 pyproject.toml(推荐)
pip install .              # 基础安装
pip install ".[enhanced]"  # 含增强模式(curl_cffi)

# 或使用 requirements.txt(传统方式)
pip install -r requirements.txt
  • requests:HTTP 请求库(必需)
  • curl_cffi:浏览器模拟库(可选,用于增强模式绕过反爬虫)

Cloudflare Workers(可选)

  • Cloudflare Workers 账户

网页端

  • 现代浏览器(推荐 Chrome 90+、Firefox 89+)
  • 使用 Service Worker 下载器需浏览器支持 Service Worker API(Chrome 45+、Firefox 44+)

使用方式

多种使用方式,满足不同场景需求

命令行工具 (CLI)

安装后可使用 fkxz 命令,也可以直接运行源码

分块文件

# 安装后使用 fkxz 命令
fkxz split -i ./video.mp4 -o ./chunks -c 10

# 或直接运行源码
python cli/main.py split -i ./video.mp4 -o ./chunks -c 10

参数说明:

  • -i, --input:要分块的文件路径(必填)
  • -o, --output:输出目录(必填)
  • -c, --chunk-size:分片大小(MB),范围 1-1024,默认 10

本地合并

# 安装后使用 fkxz 命令
fkxz merge -i ./chunks/video.mp4.fkx -o ./output
fkxz merge -i ./chunks/video.mp4.fkx -o ./output -s

# 或直接运行源码
python cli/main.py merge -i ./chunks/video.mp4.fkx -o ./output
python cli/main.py merge -i ./chunks/video.mp4.fkx -o ./output -s

参数说明:

  • -i, --input.fkx 信息文件路径(必填)
  • -o, --output:输出目录(必填)
  • -s, --skip-sha256:跳过SHA-256校验(可选)

远程下载

# 安装后使用 fkxz 命令
fkxz download -u https://example.com/files/video.mp4.fkx -o ./output
fkxz download -u https://example.com/files/video.mp4.fkx -o ./output --enhanced
fkxz download -u https://example.com/files/video.mp4.fkx -o ./output -t 300
fkxz download -u https://example.com/files/video.mp4.fkx -o ./output -s

# 或直接运行源码
python cli/main.py download -u https://example.com/files/video.mp4.fkx -o ./output
python cli/main.py download -u https://example.com/files/video.mp4.fkx -o ./output --enhanced
python cli/main.py download -u https://example.com/files/video.mp4.fkx -o ./output -t 300
python cli/main.py download -u https://example.com/files/video.mp4.fkx -o ./output -s

参数说明:

  • -u, --url.fkx 信息文件的 URL(必填)
  • -o, --output:输出目录(必填)
  • -e, --enhanced:启用增强模式(可选,需安装 curl_cffi)
  • -t, --timeout:请求超时时间(秒),默认 120(可选)
  • -s, --skip-sha256:跳过SHA-256校验(可选)

聚合 GUI 程序

python app/main.py

启动后通过左侧导航栏切换功能:

  • 文件分块:选择文件、输出目录和分片大小,点击"开始分块"
  • 文件下载:选择 .fkx 信息文件或输入 .fkx 文件 URL、选择输出目录,可选启用增强模式/SHA-256检验,点击"开始下载"

独立 GUI 工具

分块文件

python wjfk.py

在 GUI 中选择要分块的文件、输出目录和分片大小,点击"开始分块"。

分块完成后可将 .fk 分片和 .fkx 文件上传到服务器,保持相同目录结构,使用 .fkx 文件信息 URL 以供分享、下载。

合并文件(本地/远程)

python wjxz.py

在输入框中填入 .fkx 文件的本地路径或完整 URL,选择输出目录。界面默认勾选增强模式(使用 curl_cffi 浏览器模拟以绕过反爬虫),和启用SHA-256检验。可根据需要取消勾选切换为标准模式/跳过SHA-256检验。点击"开始合并"(本地)或"开始下载"(远程)。

网页端方式

方式一:使用 Cloudflare Workers

  1. 部署 web/worker.js 到 Cloudflare Workers
  2. 访问 https://your-worker.workers.dev/?fkx=https://example.com/file.fkx

方式二:使用网页端下载器

  1. web/index.html 部署到任意静态文件服务器
  2. 通过 URL 参数提供 .fkx 文件地址:
    https://your-domain.com/index.html?fkx=https://example.com/file.fkx
  • 使用时应注意浏览器跨域限制

方式三:使用 Service Worker 下载器

  1. web/sw.htmlweb/sw.js 部署到同一目录下的静态文件服务器
  2. 通过 URL 参数提供 .fkx 文件地址:
    https://your-domain.com/sw.html?fkx=https://example.com/file.fkx
  3. 页面自动解析文件信息,点击"下载"按钮即可触发 SW 流式合并下载
  • 要求站点必须使用 HTTPS 或 localhost(Service Worker 安全策略要求)
  • sw.js 必须与 sw.html 同源部署

项目结构

清晰的项目目录组织

fkxz/
├── cli/                           # 命令行工具 (CLI)
│   ├── __init__.py
│   ├── main.py                    # CLI 入口,argparse 参数解析
│   ├── utils.py                   # 公共工具函数(格式化、校验、解析)
│   ├── splitter.py                # split 命令实现
│   ├── merger.py                  # merge 命令实现
│   └── downloader.py              # download 命令实现
│
├── app/                           # 聚合 GUI 应用 (Tkinter, 带侧边栏导航)
│   ├── main.py                    # GUI 入口,集成文件分块与文件下载两大功能
│   ├── theme.py                   # 主题配色常量
│   ├── core/                      # 核心业务逻辑
│   │   ├── __init__.py
│   │   ├── base_worker.py         # Worker 基类(线程管理)
│   │   ├── splitter.py            # 文件分块核心逻辑
│   │   └── downloader.py          # 文件下载核心逻辑(本地合并+远程下载)
│   ├── ui/                        # 图形界面组件
│   │   ├── __init__.py
│   │   ├── base_page.py           # 页面基类(通用 UI 布局)
│   │   ├── sidebar.py             # 侧边栏导航
│   │   ├── splitter_page.py       # 文件分块页面
│   │   └── downloader_page.py     # 文件下载页面(本地合并+远程下载)
│   └── utils/                     # 工具函数
│       ├── __init__.py
│       └── helpers.py             # 文件格式化、校验、FKX 解析、自定义组件
│
├── icon/                          # 图标资源
│   ├── wjfk.ico                   # 文件分块图标(.ico 用于打包程序图标)
│   ├── wjfk.png                   # 文件分块图标(.png 用于窗口、任务栏图标)
│   ├── wjfkxz.ico                 # 应用主图标(.ico 用于打包程序图标)
│   ├── wjfkxz.png                 # 应用主图标(.png 用于窗口、任务栏图标)
│   ├── wjfkxz-cli.ico             # CLI 命令行工具图标(.ico 用于打包程序图标)
│   ├── wjxz.ico                   # 文件下载图标(.ico 用于打包程序图标)
│   └── wjxz.png                   # 文件下载图标(.png 用于窗口、任务栏图标)
│
├── web/                           # 网页端工具
│   ├── favicon.png                # 网站图标
│   ├── index.html                 # 网页端文件下载器
│   ├── sw.html                    # Service Worker 下载器页面
│   ├── sw.js                      # Service Worker 脚本
│   └── worker.js                  # Cloudflare Workers 脚本
│
├── docs/                          # 项目官网 (GitHub Pages)
│   ├── index.html                 # 官网主页
│   ├── download.html              # 下载页面
│   ├── favicon.png                # 官网图标
│   ├── css/                       # 样式文件
│   │   └── style.css
│   ├── js/                        # 公共脚本
│   │   └── main.js
│   ├── icons/                     # 程序图标
│   │   ├── wjfk.ico
│   │   ├── wjfkxz.ico
│   │   ├── wjfkxz-cli.ico
│   │   └── wjxz.ico
│   └── wjxz/                      # Web 在线体验工具
│       ├── index.html
│       ├── sw.html
│       ├── sw.js
│       └── favicon.png
│
├── wjfk.py                        # 独立文件分块程序 (GUI)
├── wjxz.py                        # 独立文件下载程序 (GUI, 支持增强模式)
├── pyproject.toml                 # 项目元数据与构建配置
├── requirements.txt               # Python 依赖(兼容传统 pip install -r)
├── LICENSE                        # MPL 2.0 许可证
└── .gitignore

组件说明

各核心组件的功能与特性

命令行工具 — cli/main.py

基于 argparse 的统一命令行入口,提供三大命令

命令说明
split将大文件分块为 .fk 分片和 .fkx 信息文件
merge读取本地 .fkx.fk 文件合并还原
download从远程 URL 下载 .fkx.fk 分片后合并
  • 支持 SHA-256 完整性校验
  • 支持 -s, --skip-sha256 跳过SHA-256校验
  • 支持 --enhanced 增强模式(curl_cffi 浏览器模拟)
  • 支持 --timeout 自定义请求超时时间(默认 120 秒)
  • 终端实时进度条显示
  • 下载完成后自动清理临时文件
  • 支持断点续传:分片保存在本地分片目录,中断后重新下载自动跳过已下载分片

聚合 GUI 程序 — app/main.py

Tkinter 现代化图形界面,采用侧边栏导航设计,集成文件分块与文件下载两大功能于一体

  • 文件分块:选择文件 → 设置分片大小 → 一键分块,生成 .fk 分片和 .fkx 信息文件
  • 文件下载:输入 .fkx 文件 URL 或选择本地 .fkx 文件(自动识别本地/远程模式)→ 可选增强模式 → 下载/合并分片并还原

特性:

  • 侧边栏导航,两页无缝切换
  • 文件下载页面自动识别本地/远程模式,本地模式自动合并同目录下 .fk 分片,远程模式自动下载分片后合并
  • 自定义圆角进度条和按钮组件,现代化视觉风格
  • HiDPI 高 DPI 自适应(Windows)
  • 实时分块进度 + 总进度 + 下载速度显示
  • 远程模式支持 curl_cffi 浏览器模拟(绕过反爬虫)
  • 远程下载支持断点续传(分片保留,重新下载自动跳过已下载分片)
  • 文件信息预览(文件名、大小、分片数)
  • 支持取消操作
  • 右键菜单(剪切/复制/粘贴/全选)

独立 GUI 工具

wjfk.py — 文件分块

Tkinter 图形界面,将大文件分块为多个 .fk 分片,并生成 .fkx 信息文件。

  • 支持自定义分片大小(1-1024 MB)
  • 每个分片及原始文件均计算 SHA-256 校验值
  • 支持取消分块操作

wjxz.py — 文件下载

Tkinter 图形界面,读取 .fkx 信息文件,获取所有分片并合并还原。

  • 本地模式:从本地目录读取 .fkx.fk 文件直接合并
  • 远程模式:从 URL 下载 .fkx 文件,逐个下载 .fk 分片后合并
  • 实时进度显示(分块进度 / 总进度 / 下载速度)
  • SHA-256 完整性校验
  • 断点续传:下载中断后分片保留在本地分片目录,重新下载自动跳过已下载分片
  • 自动清理临时文件
  • 增强模式(默认启用):界面提供复选框,勾选后使用 curl_cffi 模拟 Chrome 浏览器,自动模拟浏览器请求头(User-Agent、Sec-Ch-Ua、Sec-Fetch-* 等),支持 Referer 头信息传递,可绕过反爬虫保护(如 Cloudflare 验证、EdgeOne Pages、防盗链等)。取消勾选则使用标准请求模式

网页端工具 — web/

worker.js — Cloudflare Workers 后端

部署在 Cloudflare Workers 上的 HTTP 服务,接收 ?fkx= 参数,流式合并分片并提供直链下载。

  • 自动解析 .fkx 文件获取分片列表
  • 使用 FixedLengthStream 流式合并
  • 自动设置 Content-Disposition 触发浏览器下载
  • 支持跨域(CORS)
  • 注:此脚本不适用于大文件

index.html — 网页端文件下载器

轻量级的浏览器端文件下载器,支持通过 URL 参数直接解析 .fkx 文件并下载合并后的完整文件。

  • 纯前端实现,无需后端支持
  • 支持流式下载和实时进度显示
  • 自动检测并使用 File System Access API(现代浏览器)
  • 支持回退到传统下载方式
  • 注:此网页不支持跨域下载

sw.js + sw.html — Service Worker 下载器

基于 Service Worker 的浏览器端文件下载器,通过 SW 拦截请求并在浏览器端流式合并分片后返回完整文件。

  • sw.js:Service Worker 脚本,拦截 /fkxz 路径的请求,解析 .fkx 文件获取分片列表,逐个抓取 .fk 分片并通过 ReadableStream 流式合并,最终以单个文件形式返回给浏览器下载。
  • sw.html:配套前端页面,自动注册 Service Worker,解析 .fkx 文件并展示文件信息,点击下载按钮后通过 SW 代理完成流式合并下载。

相比 index.html,Service Worker 方案的优势在于:

  • 无需 File System Access API,兼容性更好
  • 合并过程在 SW 后台线程完成,不阻塞主线程
  • 直接触发浏览器原生下载行为,用户体验更流畅
  • 支持跨域(通过 SW 代理绕过 CORS 限制)

文件格式

了解 .fkx 和 .fk 文件的格式定义

.fkx 信息文件

命名格式:{原文件名}.fkx(如 video.mp4.fkx),内容格式如下:

filename=原始文件名
total_size=文件总字节数
chunk_size=分片字节数
num_chunks=分片总数
chunk_0=分片文件名,分片大小,分片SHA-256
chunk_1=分片文件名,分片大小,分片SHA-256
...
sha256=原始文件SHA-256

.fk 分片文件

命名格式:{原文件名}-{索引}.fk

网页端工具

无需安装,浏览器直接使用

Cloudflare Workers

部署 worker.js 到 Cloudflare Workers,流式合并分片并提供直链下载。

  • 自动解析 .fkx 文件获取分片列表
  • FixedLengthStream 流式合并
  • 自动设置 Content-Disposition 触发浏览器下载
  • 支持跨域(CORS)
  • 注:此脚本不适用于大文件
# 访问格式
https://your-worker.workers.dev/?fkx=https://example.com/file.fkx

网页端下载器

纯前端实现的浏览器端文件下载器,支持流式下载和实时进度显示。

  • 纯前端实现,无需后端支持
  • 支持流式下载和实时进度显示
  • 自动检测并使用 File System Access API
  • 支持回退到传统下载方式
  • 注:此网页不支持跨域下载
# 访问格式
https://your-domain.com/index.html?fkx=https://example.com/file.fkx

使用时应注意浏览器跨域限制

Service Worker 下载器

基于 Service Worker 的浏览器端下载器,SW 拦截请求并流式合并分片。

  • 无需 File System Access API,兼容性更好
  • 合并过程不阻塞主线程
  • 直接触发浏览器原生下载
  • 通过 SW 代理绕过 CORS 限制
# 访问格式
https://your-domain.com/sw.html?fkx=https://example.com/file.fkx

要求站点必须使用 HTTPS 或 localhost(Service Worker 安全策略要求)。sw.js 必须与 sw.html 同源部署。

PyInstaller 打包说明

如果你想自行从源码打包为 .exe 可执行程序

安装 PyInstaller

pip install pyinstaller

在项目根目录下执行以下命令:

打包 cli.exe(命令行工具)

pyinstaller --onefile --console --name cli --icon icon/wjfkxz-cli.ico cli/main.py
  • --onefile:打包为单个 exe 文件
  • --console:控制台程序(显示命令行窗口)
  • --name cli:输出文件名为 cli.exe
  • --icon icon/wjfkxz-cli.ico:设置 exe 程序图标

打包 wjfkxz.exe(聚合 GUI 程序)

pyinstaller --onefile --windowed --name wjfkxz --icon icon/wjfkxz.ico --add-data "icon;icon" --add-data "app;app" app/main.py
  • --windowed:窗口程序(不显示命令行窗口)
  • --icon icon/wjfkxz.ico:设置 exe 程序图标
  • --add-data "app;app":将 app 模块打包进去
  • 任务栏/窗口图标:icon/wjfkxz.png(通过 --add-data 打包,程序运行时自动加载)

打包 wjfk.exe(文件分块)

pyinstaller --onefile --windowed --name wjfk --icon icon/wjfk.ico --add-data "icon;icon" wjfk.py
  • --icon icon/wjfk.ico:设置 exe 程序图标
  • 任务栏/窗口图标:icon/wjfk.png(通过 --add-data 打包,程序运行时自动加载)

打包 wjxz.exe(文件下载)

pyinstaller --onefile --windowed --name wjxz --icon icon/wjxz.ico --add-data "icon;icon" --hidden-import curl_cffi wjxz.py
  • --icon icon/wjxz.ico:设置 exe 程序图标
  • --hidden-import curl_cffi:显式包含 curl_cffi 模块(增强模式依赖)
  • 任务栏/窗口图标:icon/wjxz.png(通过 --add-data 打包,程序运行时自动加载)

打包说明

  • 打包后的 exe 文件位于 dist/ 目录下
  • 如果增强模式打包失败或运行时不可用,程序会自动回退到标准 requests 模式
  • 建议在打包前先执行 pip install -r requirements.txtpip install ".[enhanced]" 确保所有依赖已安装
  • 对于 wjfkxz.exe,请确保 app/ 目录及其子模块(core/ui/utils/)均被正确包含