多代理下载管理器 — 基于 Tauri 2 + React 19 构建。
ProxyDownloadManager 是一款开源的多代理下载工具。每个下载任务可独立选择 HTTP / SOCKS5 代理,支持多候选代理自动切换。浏览器扩展一键拦截,多线程并发加速,断点续传不中断。
无需安装,浏览器中即可体验完整的 ProxyDownloadManager 界面,包括下载管理、代理配置、实时进度等功能。
- 每下载独立选代理 — 每个任务可选择不同代理(HTTP / SOCKS5),支持多候选代理自动切换
- 多线程并发下载 — 单任务最高 64 线程并行下载,自动根据文件大小调整连接数
- 断点续传 — 支持 HTTP
Range请求,中断后自动恢复 - 浏览器扩展联动 — Chrome / Edge / Firefox 扩展,右键菜单或自动拦截下载,URL 实时发送到桌面端
- 剪贴板智能监测 — 自动识别剪贴板中的下载链接
- 重试机制 — 下载失败自动切换代理和 User-Agent 重试
- 重复检测 — 文件已存在时提示,缺失时自动重新下载
- 下载日志 — 颜色分级日志,应用内可查看
- 系统托盘 — 后台下载、开机自启、通知推送
- 国际化 — 中英文界面
- 跨平台 — macOS、Windows、Linux
从 Releases 页面 下载对应平台的安装包。
| 平台 | 格式 |
|---|---|
| macOS | .dmg |
| Windows | .exe / .msi |
| Linux | .deb / .rpm / .AppImage |
ProxyDownloadManager 附带浏览器扩展,Chrome / Edge / Firefox 均可使用。
扩展文件位于
~/Library/Application Support/com.fb0sh.proxydownloadmanager/extensions/,需先显示~/Library文件夹。
- 打开 Finder → 菜单栏 前往
- 按住 Option 键 → 资源库 出现,点击进入
或按 ⌘⇧G,输入
~/Library回车 - 进入
Application Support→com.fb0sh.proxydownloadmanager→extensions
- 打开浏览器,访问
chrome://extensions或edge://extensions - 开启 开发者模式(右上角开关)
- 点击 加载已解压的扩展,选择
extensions目录下的chrome或edge文件夹 - 启用扩展,点击工具栏图标可开关下载拦截
- 打开 Firefox,访问
about:debugging#/runtime/this-firefox - 点击 加载临时附加组件,选择
firefox目录下的manifest.json - 扩展为临时加载,重启后需重新加载
- 打开应用,点击工具栏 Extensions
- 点击 Open Folder 打开扩展目录
- 同上 Chrome / Edge / Firefox 的加载步骤
- Node.js (v20+)
- pnpm
- Rust (edition 2021)
- Tauri 系统依赖 — 参见 Tauri 前置条件
pnpm install
pnpm tauri dev├── src/ # React 前端
│ ├── components/
│ │ ├── dialogs/ # SettingsDialog、AboutDialog、PropertiesDialog 等
│ │ ├── columns.tsx # DownloadTable 列定义
│ │ ├── Layout.tsx / Toolbar.tsx # 布局与工具栏
│ │ └── DownloadTable.tsx # 下载列表主表格
│ ├── hooks/
│ │ ├── useDownloadEvents.ts # 统一 Tauri 事件订阅
│ │ ├── useDownloadDetail.ts # 下载详情(PropertiesDialog/DetailsWindow 共用)
│ │ ├── useSettingsForm.ts # 设置表单状态管理
│ │ ├── useUpdateChecker.ts # 版本检查逻辑
│ │ ├── useContextMenu.ts # 右键菜单状态
│ │ └── useWindowManager.ts # Tauri 窗口创建
│ ├── contexts/AppContext.tsx # 全局状态 + actions context
│ ├── utils/
│ │ ├── format.ts # formatBytes、statusString 等纯函数
│ │ ├── url.ts # looksLikeDownloadUrl、extractFilename
│ │ └── file.ts # openFile、openFolder(Tauri IPC)
│ ├── constants/events.json # 事件名定义(与 Rust 共享)
│ ├── i18n/ # 中英文翻译
│ ├── stores/ # Zustand 状态管理
│ └── App.tsx # 根组件
├── src-tauri/ # Rust 后端
│ └── src/
│ ├── types/ # 类型定义(error/download/config/event 子模块)
│ ├── engine/ # 下载引擎(concurrent.rs + file_io.rs + task_download.rs + chunk.rs)
│ ├── worker.rs # 工作池(含全局/单任务限速)
│ ├── network/ # HTTP 客户端池、MultiLimiter 速率限制
│ ├── state/ # gob.rs(全局状态)、db.rs(SQLite)、runtime.rs
│ ├── services/ # SettingsService、NetworkService
│ ├── probe.rs # URL 探测 + mock 测试
│ ├── filename.rs # 文件名提取(URL + Content-Disposition)
│ ├── logger.rs # log crate 集成,统一日志
│ ├── event_bus.rs # Tauri 前端事件桥接
│ ├── download_manager.rs # 下载编排器( facade 模式)
│ ├── cmd.rs # Tauri IPC 命令
│ └── lib.rs # 应用启动、插件注册
├── browsers-extension/ # 浏览器扩展(Chrome/Edge/Firefox)
└── docs/ # 设计文档
pnpm tauri build构建产物在 src-tauri/target/release/bundle/ 目录下。
| 层 | 技术 |
|---|---|
| 桌面框架 | Tauri 2 |
| 前端 | React 19、TypeScript、Vite |
| UI | Primer React 38、Octicons |
| 状态管理 | Zustand 5 |
| 后端 | Rust、tokio、reqwest 0.12 |
| 存储 | SQLite via rusqlite |
| 日志 | log crate(统一 log::info! / log::error!,输出到 ~/Library/Logs/ProxyDM/proxydm.log) |
| 代理 | HTTP / SOCKS5 via reqwest |
| 扩展 | Chrome MV3、Firefox Manifest V2 |
- Bug 报告 — 注明应用版本、操作系统、复现步骤,附上日志(应用内 Log → 复制)
- 功能建议 — 描述使用场景
- Fork 仓库,从
main创建分支 - 功能型 PR 请先开 issue 讨论设计
- 确保类型检查和测试通过:
npx tsc --noEmit pnpm test cd src-tauri && cargo check && cargo test
- 更新 README 如果改动影响用户可见功能
- PR 标题和描述清晰
- 前端 — React 函数组件 + Hooks;事件名统一在
src/constants/events.json定义;i18n 键在src/i18n/ - 后端 — Tauri 命令在
cmd.rs,下载引擎在engine/;日志用log::info!/log::error!(不用eprintln!) - 事件名同步 —
src-tauri/events.json为唯一数据源,build.rs编译时校验与前端拷贝一致 - 浏览器扩展 — Chrome/Edge MV3,Firefox Manifest V2,WebSocket(
ws://127.0.0.1:18999)通信 - 提交格式 — Conventional Commits:
feat:、fix:、docs:、refactor:等
- 创建
src/i18n/xx.ts,导出Translations对象 - 在
src/i18n/index.ts中注册 - 在
src-tauri/src/types/config.rs和src/utils/format.ts中添加语言代码到Settings.language
MIT © fb0sh