youbin a2ecfcf550
All checks were successful
Build / Test and build (push) Successful in 5m37s
Publish release builds to Gitea packages
2026-08-14 14:50:02 +08:00
2026-08-14 13:42:43 +08:00
2026-08-13 23:02:49 +08:00
2026-08-13 23:02:49 +08:00
2026-08-13 23:02:49 +08:00
2026-08-13 23:02:49 +08:00
2026-08-13 23:02:49 +08:00
2026-08-13 23:02:49 +08:00

bdrclone

bdrclone 是面向百度网盘官方开放 API 的命令行和 FUSE 挂载客户端。它参考了 rclone 的命令/VFS 语义和 OpenList 的百度驱动流程,但代码独立实现,只调用百度官方接口。

已实现:

  • OAuth 授权码登录、过期自动刷新、token 原子持久化
  • ls、stat、cat、mkdir、rm、mv、cp、quota
  • 官方 dlink 下载、User-Agent: pan.baidu.com、HTTP Range 随机读取
  • MD5 秒传尝试、4/16/32 MiB 自动分片、多分片并发上传
  • Linux FUSE 挂载;macOS 使用 macFUSE/cgofuse 可选构建
  • 只读 HTTP 服务,支持单 Range 请求

准备百度应用

  1. 在百度网盘开放平台完成开发者认证并创建“软件”应用。
  2. 在应用安全设置中加入回调地址:http://127.0.0.1:53682/callback。百度说明修改后最长约 1 小时生效。
  3. 记下应用的 AppKey (client_id) 和 SecretKey (client_secret)。

不需要把应用提交上线审核即可授权自己的测试账号,但可用能力最终以百度控制台给应用开通的 权限为准。

构建

需要 Go 1.24 或更高版本。

go build -o bdrclone ./cmd/bdrclone
go test ./...

macOS 挂载构建

先安装 macFUSE,再让 cgo 找到头文件和动态库:

brew install --cask macfuse
CGO_CFLAGS="-I/usr/local/include/fuse" \
CGO_LDFLAGS="-L/usr/local/lib -lfuse" \
go build -tags cmount -o bdrclone ./cmd/bdrclone

Apple Silicon 上 macFUSE 的实际 include/lib 路径可能随版本变化;以安装包提供的路径为准。 未加 cmount 标签的 macOS 构建仍包含全部 CLI/HTTP 功能,执行 mount 时会给出依赖提示。

Linux 直接构建即可得到 FUSE 后端,运行时需要系统已安装 FUSE 设备和挂载工具。

配置与授权

./bdrclone config \
  --client-id '你的 AppKey' \
  --client-secret '你的 SecretKey'

./bdrclone auth

如果控制台尚未接受本机回调地址,可使用百度官方 OOB 模式。授权后,将百度页面显示的授权码 粘贴回终端:

./bdrclone auth --oob

OOB 模式使用 redirect_uri=oob,无需在本机监听端口。

默认配置文件:

  • macOS: ~/Library/Application Support/bdrclone/config.json
  • Linux: ~/.config/bdrclone/config.json

配置文件以 0600 权限保存。可以用 --config /path/config.json 指定其他位置。

只暴露网盘中的一个子目录:

./bdrclone config --root /我的资料

使用

./bdrclone ls /
./bdrclone stat /文档/report.pdf
./bdrclone download /文档/report.pdf ./report.pdf
./bdrclone upload ./photo.jpg /备份/photo.jpg
./bdrclone mkdir /备份/新目录
./bdrclone mv /备份/a.txt /备份/b.txt
./bdrclone cp /备份/b.txt /副本/b.txt
./bdrclone rm /副本/b.txt
# 目录删除必须显式确认递归语义;配置的根目录始终禁止删除
./bdrclone rm --recursive /旧备份
./bdrclone quota

挂载:

mkdir -p ~/BaiduNetdisk
./bdrclone mount ~/BaiduNetdisk
# 只读模式
./bdrclone mount --read-only ~/BaiduNetdisk

挂载写入使用本地临时文件,文件关闭/flush 时整体分片上传。随机读取映射为官方 dlink 的 Range 请求;随机写不是云端原地修改,而是“下载旧文件到缓存、修改、重新上传”。 写回失败的临时内容会保留到用户缓存目录的 bdrclone/failed-writes,并在挂载进程的标准错误中 打印恢复路径。

HTTP 服务默认只监听本机:

./bdrclone serve --addr 127.0.0.1:8080
curl http://127.0.0.1:8080/文档/report.pdf -o report.pdf

目录 URL 返回 JSON。不要在没有鉴权或反向代理保护的情况下监听公网地址。

百度 API 限制

  • 百度网盘官方接口不允许创建空文件;挂载下的空文件在 flush 时会失败。
  • 大文件下载必须使用 User-Agent: pan.baidu.com,客户端已统一设置。
  • 分片大小由会员等级决定:普通用户 4 MiB、会员 16 MiB、超级会员 32 MiB;百度限制分片数, 因此不同等级的单文件上限不同。
  • --upload-parts 控制并发(默认 3)。低上行带宽遇到超时时建议设为 1。
  • dlink 是临时链接,每次打开文件会重新获取;不会把链接写入长期缓存。
  • 本程序只走官方接口,不实现 OpenList 文档中已经失效的 crack/crack_video 接口,也不会绕过 百度会员限速或开放平台权限。

参考资料

开发验证

测试使用本地模拟百度端点,不需要真实账号:

go test -race ./...
go vet ./...

真实账号集成测试需要你自己的 AppKey/SecretKey 和授权 token,仓库不会保存这些凭据。

Description
No description provided
Readme 135 KiB
Languages
Go 99.9%
Makefile 0.1%