文档
从使用方式、环境要求到项目结构、组件说明、文件格式与打包指南的完整技术文档
环境要求
各组件运行环境与依赖
Python 工具
| 组件 | 最低版本 | 依赖 |
|---|---|---|
| 聚合 GUI | Python 3.8+ | requests、tkinter(Linux 需 apt install python3-tk) |
| 独立 GUI | Python 3.8+ | requests、tkinter(Linux 需 apt install python3-tk) |
| 增强模式 | Python 3.8+ | requests + curl_cffi |
安装依赖
pip install -r requirements.txt
requests:HTTP 请求库(必需)curl_cffi:浏览器模拟库(可选,用于增强模式绕过反爬虫)
网页端
- 现代浏览器(推荐 Chrome 90+、Firefox 89+)
- 使用 Service Worker 下载器需浏览器支持 Service Worker API(Chrome 45+、Firefox 44+)
使用方式
多种使用方式,满足不同场景需求
聚合 GUI 工具
聚合程序(分块 + 下载)
python main.py
启动后左侧边栏显示"文件分块"和"文件下载"两个功能入口,点击侧边栏按钮即可切换。无需开启多个窗口。
独立 GUI 工具
分块文件
python wjfk.py
在 GUI 中选择要分块的文件、输出目录和分片大小,点击"开始分块"。
分块完成后可将 .fk 分片和 .fkx 文件上传到服务器,保持相同目录结构,使用 .fkx 文件信息 URL 以供分享、下载。
合并文件(本地/远程)
python wjxz.py
在输入框中填入 .fkx 文件的本地路径或完整 URL,选择输出目录。界面默认勾选增强模式(使用 curl_cffi 浏览器模拟以绕过反爬虫),和启用SHA-256检验。可根据需要取消勾选切换为标准模式/跳过SHA-256检验。点击"开始合并"(本地)或"开始下载"(远程)。
网页端方式
使用 Service Worker 下载器
- 将
web/index.html和web/sw.js部署到同一目录下的静态文件服务器 - 通过 URL 参数提供
.fkx文件地址:https://your-domain.com/index.html?fkx=https://example.com/file.fkx - 页面自动解析文件信息,点击"下载"按钮即可触发 SW 流式合并下载
- 要求站点必须使用 HTTPS 或 localhost(Service Worker 安全策略要求)
sw.js必须与index.html同源部署
项目结构
清晰的项目目录组织
fkxz/ ├── icon/ # 图标资源 │ ├── wjfk.ico # 文件分块图标(打包图标) │ ├── wjfk.png # 文件分块图标(窗口、任务栏图标) │ ├── wjfkxz.ico # 应用主图标(打包图标) │ ├── wjfkxz.png # 应用主图标(窗口、任务栏图标) │ ├── wjxz.ico # 文件下载图标(打包图标) │ └── wjxz.png # 文件下载图标(窗口、任务栏图标) │ ├── web/ # 网页端下载页面 │ ├── favicon.png # 网站图标 │ ├── index.html # 文件下载页面 │ └── sw.js # Service Worker 脚本 │ ├── docs/ # 项目官网 │ ├── index.html # 官网主页 │ ├── download.html # 下载页面 │ ├── dev.html # 文档页面 │ ├── favicon.png # 官网图标 │ ├── dist/ # 打包可执行程序输出目录 │ │ ├── wjfk.exe │ │ ├── wjfkxz.exe │ │ └── wjxz.exe │ ├── css/ # 样式文件 │ │ └── style.css │ ├── js/ # 公共脚本 │ │ └── main.js │ ├── icons/ # 程序图标 │ │ ├── wjfk.ico │ │ ├── wjfkxz.ico │ │ └── wjxz.ico │ └── wjxz/ # Web 在线下载体验页面 │ ├── index.html │ ├── sw.js │ ├── experience.html │ └── favicon.png │ ├── main.py # 聚合程序,集成文件分块与文件下载 (GUI) ├── wjfk.py # 独立文件分块程序 (GUI) ├── wjxz.py # 独立文件合并/下载程序 (GUI, 支持增强模式) ├── utils.py # 公共工具模块(DPI 适配、SHA-256、图标加载、对话框、右键菜单等) ├── requirements.txt # Python 依赖 └── LICENSE # MPL 2.0 许可证
组件说明
各核心组件的功能与特性
聚合 GUI 工具
main.py — 聚合程序
Tkinter 图形界面,集成文件分块与文件下载两大功能,通过侧边栏实现功能切换。
- 左侧边栏持久化显示"文件分块"和"文件下载"两个功能入口
- 点击侧边栏按钮即可在两项功能之间切换,无需开启多个窗口
独立 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、防盗链等)。取消勾选则使用标准请求模式
公共模块
utils.py — 公共工具模块
各 GUI 程序共享的底层工具函数。
- DPI 感知设置与高分屏自适应窗口尺寸
- SHA-256 流式计算(支持取消与进度回调)
- 图标路径解析(兼容 PyInstaller 打包环境)与 Tkinter 图标加载
- 目录/文件选择对话框封装、输入框右键菜单(剪切/复制/粘贴/删除/全选)
- 统一 GUI 启动入口
run_gui_app
网页端工具 — web/
sw.js + index.html — Service Worker 下载器
基于 Service Worker 的浏览器端文件下载器,通过 SW 拦截请求并在浏览器端流式合并分片后返回完整文件。
- sw.js:Service Worker 脚本,拦截
/fkxz路径的请求,解析.fkx文件获取分片列表,逐个抓取.fk分片并通过ReadableStream流式合并,最终以单个文件形式返回给浏览器下载。 - index.html:配套前端页面,自动注册 Service Worker,解析
.fkx文件并展示文件信息,点击下载按钮后通过 SW 代理完成流式合并下载。
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
网页端工具
无需安装,浏览器直接使用
Service Worker 下载器
基于 Service Worker 的浏览器端下载器,SW 拦截请求并流式合并分片。
- 无需 File System Access API,兼容性更好
- 合并过程不阻塞主线程
- 直接触发浏览器原生下载
- 通过 SW 代理绕过 CORS 限制
# 访问格式 https://your-domain.com/index.html?fkx=https://example.com/file.fkx
要求站点必须使用 HTTPS 或 localhost(Service Worker 安全策略要求)。sw.js 必须与 index.html 同源部署。
PyInstaller 打包说明
如果你想自行从源码打包为 .exe 可执行程序
安装 PyInstaller
pip install pyinstaller
在项目根目录下执行以下命令,打包产物输出至 docs/dist/ 目录:
打包 wjfk.exe(文件分块)
pyinstaller --onefile --windowed --name wjfk --distpath docs/dist --icon icon/wjfk.ico --add-data "icon;icon" wjfk.py
--icon icon/wjfk.ico:设置 exe 程序图标- 任务栏/窗口图标:
icon/wjfk.png(通过--add-data打包,程序运行时自动加载)
打包 wjfkxz.exe(聚合程序)
pyinstaller --onefile --windowed --name wjfkxz --distpath docs/dist --icon icon/wjfkxz.ico --add-data "icon;icon" main.py
--icon icon/wjfkxz.ico:设置 exe 程序图标--add-data "icon;icon":打包图标资源(窗口/任务栏图标icon/wjfkxz.png)
打包 wjxz.exe(文件下载)
pyinstaller --onefile --windowed --name wjxz --distpath docs/dist --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 文件位于
docs/dist/目录下 - 建议在打包前先执行
pip install -r requirements.txt确保所有依赖已安装 - 打包产生的
build/目录与.spec文件可手动删除