Skip to content

hanyu-dev/pcs

Repository files navigation

BaiduPCS-Rust

License Rust Vue Docker

🚀 基于 Rust + Vue 3 的高性能百度网盘客户端 | High-performance Baidu Netdisk client built with Rust and Vue 3

功能特性快速开始技术栈项目结构最新版本贡献


📖 简介

BaiduPCS-Rust 是一个使用 Rust 和 Vue 3 构建的现代化百度网盘第三方客户端,提供简洁的 Web 界面和高效的上传/下载功能。

⭐ 支持项目发展

如果这个项目对你有帮助,请点一个 Star 支持!

Star

你的 Star 会让我更有动力持续更新 🚀

🎯 项目初衷

本项目主要是为了解决以下痛点:

  • NAS 环境下的下载速度问题:虽然已经是百度网盘会员,但在 NAS 设备上使用官方百度网盘客户端无法实现满速下载,影响使用体验
  • 高性能下载需求:通过多线程并发下载、断点续传等技术,充分利用会员带宽,实现满速下载
  • 自动备份功能:支持将本地文件自动备份到百度网盘,实现数据的安全存储和同步
  • 增强上传体验:支持文件/文件夹上传、秒传能力与上传任务管理,让本地备份到网盘的过程更可控
  • 跨平台支持:支持 Windows、Linux、macOS 等多种平台,方便在不同设备上使用
  • 现代化体验:提供简洁美观的 Web 界面,支持实时进度显示和任务管理

🙏 致谢

本项目参考并受到了以下优秀项目的启发:

感谢这些项目的开源贡献,为本项目的开发提供了重要参考。


✨ 功能特性

🔐 认证系统

  • ✅ 二维码扫码登录(百度网盘 APP 扫码)
  • ✅ 自动会话管理
  • ✅ 会话持久化
  • ✅ 自动登录状态验证
  • ✅ 失效自动跳转登录页

📁 文件管理

  • ✅ 浏览网盘文件和目录
  • ✅ 目录导航(面包屑)
  • ✅ 文件列表展示(表格视图)
  • ✅ 文件信息展示(名称、大小、时间、类型)

⬇️ 下载引擎

  • ✅ 单文件下载(多线程并发下载,8 个并发分片,可配置)
  • 文件夹下载(递归下载整个文件夹,自动扫描并创建任务)
  • 批量下载(支持多文件/文件夹同时下载)
  • ✅ 断点续传支持
  • ✅ 速度限制(可配置)
  • ✅ 实时进度显示(下载速度、进度百分比、ETA)
  • ✅ 任务队列管理
  • ✅ 暂停/继续/删除功能
  • ✅ URL健康管理和智能淘汰策略
  • CDN链接刷新三层检测机制(速度异常检测、线程停滞检测、定时强制刷新)
  • 下载文件资源管理器(选择下载目录,支持最近目录记忆)

⬆️ 上传引擎与任务管理

  • ✅ 统一的上传任务列表视图(上传管理页面)
  • ✅ 支持选择本地文件或文件夹发起上传(通过本地文件资源管理器)
  • 批量上传(支持多文件/文件夹同时上传)
  • 统一上传按钮(文件和文件夹使用同一个上传入口)
  • ✅ 上传任务进度实时展示:已上传大小、总大小、上传速度、剩余时间(ETA)
  • ✅ 任务控制:暂停/继续/重试/删除
  • ✅ 秒传标识:支持后端秒传时,在任务上展示"秒传"标记
  • 上传最近目录记忆(自动记录最近使用的上传目录)

🎨 Web 界面

  • ✅ 现代化 Vue 3 + Element Plus UI
  • ✅ 响应式设计
  • ✅ 实时状态更新
  • ✅ 友好的用户体验
  • ✅ 移动端适配

💻 本地文件资源管理器(上传文件选择器)

  • ✅ 仿系统"资源管理器"的本地文件浏览体验
  • ✅ 支持根目录、前进/后退、返回上一级、刷新等导航操作
  • ✅ 支持文件/目录/文件或目录三种选择模式(根据上传场景配置)
  • ✅ 支持分页加载和"加载更多",适配大目录场景
  • ✅ 提供空态/错误态 UI,操作失败可一键重试

🔗 转存功能

  • 分享链接转存(支持转存百度网盘分享链接到自己的网盘)
  • ✅ 提取码验证(支持带提取码的分享链接)
  • ✅ 转存后自动下载(可选,转存成功后自动创建下载任务)
  • ✅ 转存任务管理(查看转存进度和状态)

🐳 部署支持

  • ✅ Docker 一键部署
  • ✅ Docker Compose 支持
  • ✅ 多阶段构建优化

📡 实时与持久化能力

  • ✅ 任务持久化与断点恢复
  • ✅ WebSocket 实时推送
  • ✅ 日志持久化与滚动

📋 最新版本

v1.5.1 (当前版本)

基于 v1.5.0 的功能特性:

  • 任务持久化:新增 WAL + 元数据的持久化管理器,支持后台批量刷写、断点恢复与优雅关闭(下载/上传/转存任务重启可恢复)
  • 移动端适配:主布局新增移动端抽屉导航与底部 Tab 栏,响应式样式覆盖文件/下载/上传/转存/设置页
  • 日志持久化与滚动:支持日志文件落盘、按大小滚动和保留天数配置,默认启用
  • 任务槽机制:下载引入任务槽(固定位+借调位)机制,替代预注册机制,保证并发可控
  • WebSocket 实时推送:任务状态可实时刷新

v1.5.1 更新内容:

  • 🐛 修复若干 bug
  • ✨ 系统页面选择下载目录支持文件资源管理器

📝 完整版本历史:查看 CHANGELOG.md 了解所有版本的详细更新记录


🚀 快速开始

🔐 登录流程说明

操作步骤

  1. 打开百度网盘 APP

    • 在手机上打开百度网盘 APP
    • 确保 APP 已登录你的账号
  2. 扫描二维码

    • 在浏览器中访问应用(默认 http://localhost:18888
    • 页面会自动显示登录二维码
    • 打开百度网盘 APP,点击"扫一扫"功能
    • 扫描网页上显示的二维码
  3. 确认登录

    • 扫描成功后,APP 会弹出确认登录提示
    • 重要:在 APP 中点击确认登录
    • 重要:确认后,APP 不能关闭或切换到后台,否则登录会失败
  4. 等待登录完成

    • 网页会自动轮询登录状态(通常 1-3 秒)
    • 登录成功后会自动跳转到文件管理页面

⚠️ 重要提示

  • APP 必须保持打开状态:确认登录后,不要立即在 APP 中点击确认,先稍等片刻,等待网页显示“扫码成功”后,再按提示继续操作。
  • APP 不能关闭、不能退出、不能切换到后台,必须保持在前台运行,直到网页显示登录成功
  • 原因说明:网页需要通过轮询机制查询登录状态,如果 APP 关闭,百度服务器可能无法正确返回登录状态,导致登录失败
  • 登录失败处理:如果等待一段时间后仍无法登录,请:
    1. 刷新网页,重新获取二维码
    2. 重新执行上述操作步骤
    3. 确保 APP 在确认登录后保持打开状态

登录状态保持

  • 登录成功后,会话会自动保存到本地
  • 下次启动应用时会自动恢复登录状态
  • 如果会话过期,会自动跳转到登录页面重新登录

界面预览

文件管理

文件管理

浏览和管理百度网盘中的文件和目录,支持目录导航、文件信息查看和下载操作。

下载管理

下载管理

实时查看下载进度,支持多任务并发下载,显示下载速度、进度百分比和剩余时间。

下载对话框

下载对话框

通过下载对话框确认下载任务的保存路径和任务信息,并可根据需要调整下载参数。

上传管理

上传管理

集中查看所有上传任务,实时展示进度、速度和剩余时间,支持暂停、继续和删除操作。

转存管理

转存管理

在转存管理页面集中查看所有分享链接转存任务的进度和状态,支持查看成功、失败任务,并进行删除等操作。

转存弹窗

转存弹窗

通过转存弹窗输入或粘贴百度网盘分享链接和提取码,选择转存目标目录,并发起转存任务。

文件上传对话框(本地文件资源管理器)

文件上传

通过内置的本地文件资源管理器选择文件或文件夹上传,支持目录导航、空态/错误态提示和分页加载。

上传相关系统设置

上传设置

在系统设置中配置上传相关参数(如并发策略等),与下载配置统一管理。

转存设置

转存设置

在转存设置中配置与分享链接转存相关的参数,例如默认转存目录、是否自动在转存完成后创建下载任务等。

系统设置

系统设置

配置服务器参数和下载选项,包括线程数、分片大小、下载目录等。

使用 Docker(推荐)

方式一:使用预构建镜像(最简单)

使用 docker run(推荐)

# 1. 创建必要的目录
mkdir -p baidupcs-rust/{config,downloads,data,logs,wal}
cd baidupcs-rust

# 2. 运行容器(使用预构建镜像)
docker run -d \
  --name baidu-netdisk-rust \
  -p 18888:18888 \
  -v $(pwd)/config:/app/config \
  -v $(pwd)/downloads:/app/downloads \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/logs:/app/logs \
  -v $(pwd)/wal:/app/wal \
  --restart unless-stopped \
  komorebicarry/baidupcs-rust:latest

# 3. 访问应用
open http://localhost:18888

使用 docker-compose

# 1. 创建必要的目录
mkdir -p baidupcs-rust/{config,downloads,data,logs,wal}
cd baidupcs-rust

# 2. 下载 docker-compose 配置文件
# 从项目仓库下载 docker-compose.image.yml 文件

# 3. 启动服务(使用预构建镜像)
docker-compose -f docker-compose.image.yml up -d

# 4. 访问应用
open http://localhost:18888

方式二:从源码构建

# 1. 克隆项目
git clone https://github.com/komorebiCarry/BaiduPCS-Rust.git
cd BaiduPCS-Rust

# 2. 构建并启动服务
docker-compose up -d

# 3. 访问应用
open http://localhost:18888

说明

  • Docker 容器内,后端 API 服务和前端静态文件服务运行在同一个进程中
  • 只需要暴露一个端口(18888)即可访问完整应用
  • 前端页面和 API 调用都通过 http://localhost:18888 访问
  • 前端在容器内部通过 http://localhost:18888/api/v1 调用后端 API
  • 挂载目录说明
    • config:配置文件目录(应用配置、下载设置等)
    • downloads:下载文件保存目录
    • data:会话数据目录(登录信息、会话持久化)
    • logs:日志文件目录(应用运行日志,支持滚动)
    • wal:WAL 目录(任务持久化数据,支持断点恢复)
  • 预构建镜像自动发布在以下位置:
    • GitHub Container Registry - ghcr.io/komorebicarry/baidupcs-rust:latest(推荐,无需额外注册)
    • Docker Hub - komorebicarry/baidupcs-rust:latest(可选,需要配置 secrets)
  • 当创建 Git 标签(如 v1.0.0)时,GitHub Actions 会自动构建并推送 Docker 镜像
  • Linux 用户推荐使用 Docker Hub 镜像(更通用,无需登录):komorebicarry/baidupcs-rust:latest
  • 如果镜像拉取较慢,也可以从 GitHub Releases 页面直接下载 Docker 镜像文件(baidupcs-rust-{版本号}-docker.tar.gz),然后使用以下命令加载:
    # 下载镜像文件后,加载镜像
    docker load < baidupcs-rust-v1.5.1-docker.tar.gz
    
    # 加载后可以使用镜像运行容器
    docker run -d \
      --name baidu-netdisk-rust \
      -p 18888:18888 \
      -v $(pwd)/config:/app/config \
      -v $(pwd)/downloads:/app/downloads \
      -v $(pwd)/data:/app/data \
      -v $(pwd)/logs:/app/logs \
      -v $(pwd)/wal:/app/wal \
      --restart unless-stopped \
      baidupcs-rust:v1.5.1

手动安装

前提条件

  • Rust 1.75+
  • Node.js 18+
  • npm 或 pnpm

后端

cd backend
cargo build --release
cargo run --release

前端

cd frontend
npm install
npm run build
# 或者开发模式
npm run dev

访问 http://localhost:5173(开发模式)或 http://localhost:18888(生产模式)


📝 平台支持说明

测试平台

本项目主要在以下平台进行测试:

  • Windows - 主要开发和测试平台
  • Docker - 容器化部署,支持跨平台运行

其他平台

虽然项目理论上支持 Linux、macOS 等其他平台,但目前不会进行主动测试。如果您在其他平台使用遇到问题,欢迎提交 Issue。

多平台打包

项目使用 GitHub Actions 进行自动化多平台构建和打包,支持:

  • Windows (x86_64)
  • Linux (x86_64, ARM64)
  • macOS (x86_64, ARM64)

预编译的二进制文件可在 Releases 页面下载。


🛠️ 技术栈

后端

  • 语言: Rust 1.75+
  • 框架: Axum 0.7(Web 框架)
  • 异步运行时: Tokio
  • HTTP 客户端: Reqwest
  • 序列化: Serde + Serde JSON
  • 日志: Tracing

前端

  • 框架: Vue 3(Composition API)
  • 语言: TypeScript 5
  • 构建工具: Vite 6
  • UI 库: Element Plus
  • 状态管理: Pinia
  • 路由: Vue Router 4
  • HTTP 客户端: Axios

部署

  • 容器化: Docker + Docker Compose
  • 多阶段构建: 优化镜像大小
  • 健康检查: 自动故障检测

📁 项目结构

BaiduPCS-Rust/
├── backend/                # Rust 后端
│   ├── src/
│   │   ├── auth/          # 认证模块
│   │   ├── netdisk/       # 网盘 API
│   │   ├── downloader/    # 下载引擎
│   │   ├── uploader/      # 上传引擎
│   │   ├── transfer/      # 转存模块(分享链接转存)
│   │   ├── common/        # 公共模块(CDN刷新检测等)
│   │   ├── filesystem/    # 文件系统访问模块
│   │   ├── config/        # 配置管理
│   │   ├── server/        # Web 服务器
│   │   └── sign/          # 签名算法
│   └── Cargo.toml
├── frontend/               # Vue 3 前端
│   ├── src/
│   │   ├── views/         # 页面组件
│   │   ├── components/    # 公共组件
│   │   ├── api/           # API 封装
│   │   ├── stores/        # Pinia 状态
│   │   └── router/        # 路由配置
│   └── package.json
├── config/                 # 配置文件示例
│   ├── app.toml.example
│   └── config.example.json
├── scripts/                # 构建脚本
│   ├── build.sh
│   ├── deploy.sh
│   ├── dev.sh
│   └── test.sh
├── tests/                  # 测试脚本
│   ├── integration_test.sh
│   └── performance_test.sh
├── Dockerfile              # Docker 镜像
├── docker-compose.yml      # 生产环境
├── docker-compose.dev.yml  # 开发环境
├── rustfmt.toml            # Rust 代码格式配置
├── .gitignore              # Git 忽略文件
├── LICENSE                 # Apache License 2.0
└── README.md               # 项目说明

⚙️ 配置

配置文件位于 backend/config/app.toml:

[server]
host = "127.0.0.1"
port = 8080
cors_origins = ["*"]

[download]
download_dir = "downloads"
max_global_threads = 10
max_concurrent_tasks = 2
chunk_size_mb = 10
max_retries = 3

📋 配置参数说明

下载配置参数

  • max_global_threads: 全局最大线程数(所有下载任务共享的并发分片数)
  • max_concurrent_tasks: 最大同时下载文件数
  • chunk_size_mb: 每个分片的大小(单位: MB)
  • max_retries: 下载失败后的最大重试次数

普通用户配置建议

普通用户请将全局最大线程数max_global_threads)和最大同时下载数max_concurrent_tasks)都设置为 1。

[download]
max_global_threads = 1
max_concurrent_tasks = 1

⚠️ 注意:调大线程数只会在短时间内提升下载速度,且极易很快触发限速,导致几小时至几天内账号在各客户端都接近 0 速。

SVIP 用户配置建议

SVIP 用户建议全局最大线程数max_global_threads)设置为 10 以上,根据实际带宽可调大,但不建议超过 20。可以配合最大同时下载数max_concurrent_tasks)调整,注意最大同时下载数越大不代表速度越快

[download]
max_global_threads = 10    # 建议 10-20
max_concurrent_tasks = 2    # 可根据需求调整

🧪 测试

# 运行所有测试
./scripts/test.sh

# 后端测试
cd backend
cargo test

# 集成测试
./tests/integration_test.sh

# 性能测试
./tests/performance_test.sh

📈 性能指标

指标 数值
Docker 镜像大小 ~150MB
启动时间 5-10 秒
内存占用(空闲) 100-200MB
内存占用(下载) 200-500MB
并发下载分片 最多 16 个

🗺️ 路线图

  • ✅ 基础架构
  • ✅ 认证模块(二维码登录)
  • ✅ 文件浏览
  • ✅ 下载引擎(多线程 + 断点续传)
  • ✅ Web 服务器(RESTful API)
  • ✅ 前端界面(Vue 3)
  • ✅ Docker 部署
  • ✅ 文件夹下载(目录下载)
  • ✅ 批量下载(多文件选择下载)
  • ✅ 批量上传(多文件/文件夹上传)
  • ✅ 上传功能
  • ✅ 百度网盘新建文件夹功能(⚠️ 可能需要重新登入才可使用)
  • ✅ CDN链接刷新三层检测机制(速度异常检测、线程停滞检测、定时强制刷新)
  • ✅ 转存分享链接功能
  • ✅ 上传下载最近目录记忆
  • ✅ 下载文件资源管理器
  • ✅ 任务持久化
  • ✅ WebSocket 实时推送与心跳/重连
  • ✅ 日志持久化与滚动
  • ✅ 移动端适配
  • 📝 自动备份
  • 📝 加密自动备份

🤝 贡献

欢迎贡献代码!请遵循以下步骤:

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

开发规范

  • Rust: 遵循 Rust 官方代码风格(使用 cargo fmtcargo clippy
  • TypeScript: 遵循 Vue 3 最佳实践
  • 提交信息: 使用清晰的提交信息

📄 许可证

本项目采用 Apache License 2.0 许可证 - 详见 LICENSE 文件


⚠️ 免责声明

本项目仅供学习和研究使用,请勿用于商业用途。使用本工具产生的任何问题与本项目无关。


🙏 致谢


⭐ 如果这个项目对你有帮助,请给一个 Star!

Made with ❤️ by Rust + Vue 3

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published