一个使用 Rust 和 Vue 3 构建的 百度网盘第三方客户端,提供多线程下载、多账号管理、自动备份与本地侧加密上传能力,并支持 Web 管理、访问密码与 TOTP 双因素认证。
一个使用 Rust 和 Vue 3 构建的 百度网盘第三方客户端,提供多线程下载、多账号管理、自动备份与本地侧加密上传能力,并支持 Web 管理、访问密码与 TOTP 双因素认证。
BaiduPCS-Rust 是一个使用 Rust 和 Vue 3 构建的现代化百度网盘第三方客户端,提供简洁的 Web 界面和高效的上传/下载功能。
如果这个项目对你有帮助,请点一个 Star 支持!
你的 Star 会让我更有动力持续更新
本项目主要是为了解决以下痛点:
本项目参考并受到了以下优秀项目的启发:
感谢这些项目的开源贡献,为本项目的开发提供了重要参考。
owner_uid 隔离pan.baidu.com/apaas/share?surl=...,与个人版分享同一套操作体验).dat 扩展名隐藏真实文件类型⚠️ 重要提示:请务必妥善备份以下文件,否则已加密的文件将无法解密!
config/encryption.json:加密密钥文件(建议同时使用界面的"导出密钥"功能备份)config/baidu-pcs.db:数据库文件,包含加密映射表(记录加密文件与原始文件名的对应关系)
为了方便用户在没有主程序的情况下解密文件,我们提供了独立的命令行解密工具 decrypt-cli。
特性:
下载:
decrypt-cli-v0.1.0 专用发布页 直接下载对应平台的 decrypt-cli 可执行文件decrypt-cli 使用说明(点击展开)
解密前需要准备以下文件:
encryption.json - 加密密钥文件(从主程序导出或备份)mapping.json - 加密映射文件(批量解密时需要,可从主程序导出).dat 文件)# 恢复原始目录结构(使用映射文件中的原始路径)
decrypt-cli decrypt --key-file encryption.json --map mapping.json --in-dir ./encrypted --out-dir ./decrypted
# 镜像输入目录结构(按 --in-dir 的目录结构输出)
decrypt-cli decrypt --key-file encryption.json --map mapping.json --in-dir ./encrypted --out-dir ./decrypted --mirror# 自动尝试所有密钥
decrypt-cli decrypt --key-file encryption.json --in file.dat --out file.txt
# 指定密钥版本
decrypt-cli decrypt --key-file encryption.json --in file.dat --out file.txt --key-version 2| 参数 | 说明 |
|---|---|
--key-file |
密钥配置文件路径(必需) |
--map |
映射文件路径(批量模式必需) |
--in-dir |
输入目录(批量模式) |
--out-dir |
输出目录(批量模式) |
--in |
单个输入文件(单文件模式) |
--out |
单个输出文件(单文件模式) |
--key-version |
指定密钥版本(单文件模式可选) |
--mirror |
镜像输入目录结构,而不是恢复原始路径 |
加密映射原理说明(点击展开)
a1b2c3d4-xxxx.dat)加密文件名 → 原始文件名 存储在数据库中文件夹使用路径感知的加密映射策略:
加密时(原始名 → 加密名):根据 (父路径, 文件夹名) 查询或生成 UUID
示例:
1. 首次遇到 /backup/a/docs:
- 查询:parent=/backup/a, name=docs → 未找到
- 生成新 UUID:abc-123-xxx
- 保存映射:(/backup/a, docs) → abc-123-xxx
2. 首次遇到 /backup/b/docs:
- 查询:parent=/backup/b, name=docs → 未找到
- 生成新 UUID:def-456-xxx(不同路径,不同 UUID)
- 保存映射:(/backup/b, docs) → def-456-xxx
3. 再次遇到 /backup/a/docs:
- 查询:parent=/backup/a, name=docs → 找到 abc-123-xxx
- 复用已有加密名(保持一致性)解密时(加密名 → 原始名):直接根据 UUID 查询,无需父路径(UUID 全局唯一)
这种设计确保:
维护版本:修复文件夹下载重复计数、永远到不了终态、同一批文件反复重下把流量烧光(issue #156,建议所有用户升级),并堵住分片「部分数据」续传黏在坏链接上的流量黑洞。
问题修复:
fs_id 去重并随快照持久化;失败计数同样按 fs_id 抵消,避免文件都在盘上却报失败维护版本:修复5~10MB 文件必然下载失败(自 v2.1.2 起的回归,建议所有用户升级)与小文件进度条停在中途。
问题修复:
v2.1.2 起 ≤10MB 的文件被一律压成单分片,Range 跨度超过百度单请求 5MB 硬限,5~10MB 的文件每个链接都返回 403(errno 31326),换链接重试都没用。现分片尺寸统一收口,小文件仍尽量单片,但同时受 5MB 硬限与会员等级上限裁剪(普通用户 4MB、SVIP 5MB),不会退回旧版 256KB/512KB 的请求碎片维护版本:在 v2.2.0 基础上聚焦分享同步可观测性与自愈、下载槽位/调度正确性,以及路径栏交互。
新功能:
问题修复:
interrupted 后、标回 running 前若再被杀一次,run 永久卡死、下载全是暂停。现对历史中断 run 走「只接管、不重跑」,有残留就接着跑,没有就跳过\ 拆段;面包屑中间 / 不再丢失;点击热区收敛到文字文档: README 补充 macOS 预编译包启动说明。
功能版本:支持百度网盘企业版(apaas)分享转存,并对文件夹下载与分享同步做了一轮系统性修复。
新功能:
pan.baidu.com/apaas/share?surl=xxx&pwd=yyyy 与个人版是两套互不兼容的接口体系,此前拿它去调个人版接口会解析到无关 shareid、后续稳定报 errno=-12(issue #139)。现新增分享策略层,转存 / 分享直下 / 分享同步三条路径均自动适配;老任务数据不受影响skipped 事件与跳过统计/明细,详情列表以「跳过」状态展示,整体进度改用 (已下载 + 已跳过) / 总大小问题修复:
显式指定 > 设置页默认 > 覆盖 三级回退group_id 对账剔除);文件夹的冲突策略未持久化导致重启后失效(现随快照落盘);已下载 用 max() 单调递增会把一次重复累加永久锁死(实测 98.2% 而真实只有一半,现封顶到总大小并告警)Backup 优先级,只用空闲槽、不再挡住用户手动下载Interrupted 导致下一轮全部重做;转存改为「提交成功即记账」,避免续跑判据丢失;补齐续跑期间的进度广播errno=12 + info[0].errno=-32 被算成「超过上限 0」并按可二分重试处理,实测刷出 347 次 errno=-32 原地空转。现归类为空间不足、早停提示/sharelink…/、跨账号聚合把部分成功显示成全部成功聚焦下载稳定性,修复两处导致文件操作/下载失败的问题。
问题修复:
errno=-6(典型为删除失败,见 issue #130)。现按名称去重并强制 STOKEN 唯一——以登录保存、已验证可用的 user_auth.stoken 为准,清除另一域混入的 STOKEN;PANPSC 同样以最新预热值覆盖31066。现改为进度驱动的停滞判定:仅当「有活跃下载」且「字节数连续 30 分钟零增长」才判停滞,慢速下载永不触发、用户暂停不计时;停滞时先取消 worker 再清理临时目录,中性文案「下载长时间无进展,已判定为停滞并停止;可稍后重试」。阈值可用 BAIDUPCS_DOWNLOAD_STALL_TIMEOUT_MINS 覆盖修复部分账号文件操作报 errno=-6,并聚焦分享同步·排除规则的正确性与易用性。
问题修复:
errno=-6(BDUSS 本身有效,见 issue #130),表现为登录成功但列目录/转存/上传全部失败。现有 STOKEN 一律随 Cookie 带上;文件列表遇 errno=-6 自动预热重试自愈;仍失败时提示重新扫码或导入含 STOKEN 的完整 Cookieinclude 圈选目录、再对其深层子内容配 exclude 时排除不生效的问题——根因是 BFS 在 include 目录下一层截断,深层内容从未被扫描;现继续深入 include 目录的所有后代,多层级排除恢复生效(issue #128 追加反馈)新功能:
聚焦分享同步「抓取阶段」(递归列目录)的健壮性、可观测性与过滤正确性。
新功能:
scan_progress 实时事件(约 500ms 节流),前端显示「扫描目录中(已扫描 N 个目录 · 发现 N 个文件 · 当前目录)」,不再对着「运行中」干等;整轮重试提示「网络异常,正在第 N 次重试」,已扫描目录复用不重爬phase(scanning / diffing / executing),页面刷新或断线重连后由 REST 轮询兜底细化状态问题修复:
include / exclude 剔除后代的目录被整目录 fs_id 直传时,百度递归复制整目录、连带把被过滤子项也搬过去、过滤形同虚设的问题;现展开到子节点逐层提交,干净子目录仍整目录高效转存v2.1.3 / v2.1.2 / v2.1.1 / v2.1.0 / v2.0.1 / v2.0.0 版本详情(点击展开)
新功能:
name / time / size 透传后端,含升降序切换);下载管理页新增排序控件与状态筛选栏(含各状态计数),大量任务下更易定位问题修复:
问题修复:
errno=-9 提示明确为链接失效或提取码错误工程: 新增分享同步诊断脚本 share_sync_probe.py / share_sync_status.py / `share_sync_rest
No open issues yet, or sync has not completed.