百度网盘文件上传
前提
已有百度网盘开放平台授权(access_token有效),.env文件含AccessToken、AppKey、SecretKey。
先用 baidu-pan-per-auth-skill 完成授权获取token。
上传文件
python3 scripts/upload.py <local_file> <remote_dir> <env_path> [--overwrite]
参数
| 参数 | 说明 |
|---|
| local_file | 本地文件路径 |
| remote_dir | 网盘远程目录(如 /docker镜像、/备份) |
| env_path | .env文件路径(含AccessToken等凭据) |
| --overwrite | 覆盖同名文件(默认不覆盖) |
上传流程
所有文件统一走 precreate → superfile2(tmpfile) × N → create 流程:
- ≤4MB → 1片快速上传
- >4MB → 自动分片(每片4MB),计算每片MD5校验
断点续传
上传中断后,重新运行相同命令即可自动续传:
- 上传状态自动保存在源文件同目录下的
.upload_state.json
- 重启时检测:文件MD5未变 → 跳过已上传分片 → 从断点继续
- Ctrl+C 安全中断,状态自动保存
- 上传完成后自动删除状态文件
进度监控
大文件上传时实时显示:
[████████████░░░░░░░░] 60.0% | 1.1GB/1.9GB | 3.2MB/s | ETA 4m12s
示例
# 上传单个文件
python3 scripts/upload.py /tmp/report.pdf "/文档" /path/to/.env
# 上传大文件(自动分片+进度监控+断点续传)
python3 scripts/upload.py /backup/data.zip "/备份" /path/to/.env
# 覆盖已有文件
python3 scripts/upload.py /tmp/config.json "/配置" /path/to/.env --overwrite
# 中断后续传(重新运行相同命令即可)
python3 scripts/upload.py /backup/data.zip "/备份" /path/to/.env
关键参数
| 参数 | 值 | 说明 |
|---|
| 分片大小 | 4MB | 百度网盘API限制 |
| 上传域名 | d.pcs.baidu.com | 分片上传专用域名 |
| 重试次数 | 3 | 每个分片失败后重试 |
| 远程路径格式 | /开头 | 如 /docker镜像 |
| 状态文件 | .upload_state.json | 保存在源文件同目录 |
故障排查
| 错误 | 原因 | 解决 |
|---|
| errno: 2 | 路径格式错误 | 确保以 / 开头 |
| error_code: 31023 | token过期或uploadid过期 | 用 baidu-pan-per-auth-skill 刷新token |
| error_code: 31064 | 文件已存在 | 加 --overwrite 覆盖 |
| SSL/超时 | 网络波动 | 自动重试3次 |
| 上传中断 | Ctrl+C或网络断开 | 重新运行相同命令,自动断点续传 |
| 续传失败 | 源文件已变更 | 删除 .upload_state.json 重新上传 |
依赖
- curl(系统自带)
- Python 3.7+
- 有效的百度网盘access_token