# fundrive
**Repository Path**: farfarfun/fundrive
## Basic Information
- **Project Name**: fundrive
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-10-07
- **Last Updated**: 2026-10-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# FunDrive
FunDrive 是一个统一的网盘操作接口框架,旨在提供一个标准化的方式来操作不同的网盘服务。
## 📚 文档导航
- **[📖 API接口文档](docs/API.md)** - 完整的API接口说明,适合开发者集成使用
- **[📋 变更日志](CHANGELOG.md)** - 版本变更记录和更新说明
- **[🚀 快速入门指南](docs/QUICK_START.md)** - 5分钟快速上手,包含常用场景示例
- **[🔧 开发指南](docs/DEVELOPMENT_GUIDE.md)** - 开发者贡献指南和最佳实践
- **[📊 性能优化指南](docs/OPTIMIZATION_GUIDE.md)** - 性能优化建议和最佳实践
## 从 1.x 升级到 2.x
2.0 对 `BaseDrive` 的接口做了不兼容调整,1.x 的代码需要按下表改动。只用位置参数调用的
代码大多不受影响,用关键字参数的一定要改。
| 变更点 | 1.x 写法 | 2.x 写法 |
|:---|:---|:---|
| 本地保存目录统一叫 `save_dir` | `drive.download_file(fid, local_dir="./d")`
`drive.download_dir(fid, local_dir="./d")` | `drive.download_file(fid, save_dir="./d")`
`drive.download_dir(fid, save_dir="./d")` |
| 上传的本地路径改名为 `filepath` | `drive.upload_file(local_path="./a.txt", fid="0")` | `drive.upload_file(filepath="./a.txt", fid="0")` |
| 上传目录的本地路径仍叫 `filedir` | `drive.upload_dir(local_path="./d", fid="0")` | `drive.upload_dir(filedir="./d", fid="0")` |
| 三个顶层别名不再从 `fundrive.drives` 导出 | `from fundrive.drives import LanZouSnapshot, download_tsinghua, OpenDataLabDrive` | `from fundrive.drives.lanzou import LanZouSnapshot`
`from fundrive.drives.tsinghua import download_tsinghua`
`from fundrive.drives.openxlab import OpenDataLabDrive` |
| 新增按名取驱动的工厂 | 只能逐个 import | `from fundrive.drives import get_drive`
`drive = get_drive("lanzou")` |
| `DriveFile` 字段升级 | `DriveFile(fid, name, ext={"size": 1})`,大小只能从 `ext` 里翻 | `DriveFile(fid=..., name=..., size=1, time=...)`,`f.size` 与 `f["size"]` 等价 |
| 查不到时返回 `None` | `get_file_info()` / `get_dir_info()` 行为不统一 | 统一返回 `DriveFile \| None`,调用方必须判空 |
| Python 版本 | `>=3.8` | `>=3.12` |
其它需要注意的:
- 驱动类名以各驱动包的实际导出为准,`OSSDrive`、`TSingHuaDrive`、`WSSDrive` 等保留了
历史大小写,照着 README 示例抄即可。
- 异常统一收敛到 `fundrive.core.exceptions`(`FunDriveError`、`AuthenticationError`、
`InvalidParameterError` 等);`login()` 失败返回 `False`,不靠抛异常传递结果。
- 凭据统一通过 funsecret 读取,`login()` 的参数不传时会回落到本地配置。
## 支持的云存储服务
### 📊 驱动实现状态总览
| 序号 | 网盘服务 | 核心 | 高级 | 示例 | 规范 | 状态 | 包名 |
|:---:|:--------|:---:|:---:|:---:|:---:|:---:|:-----|
| 1 | **[Google Drive](src/fundrive/drives/google/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[google]` |
| 2 | **[OneDrive](src/fundrive/drives/onedrive/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[onedrive]` |
| 3 | **[Dropbox](src/fundrive/drives/dropbox/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[dropbox]` |
| 4 | **[Amazon S3](src/fundrive/drives/amazon/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[amazon]` |
| 5 | **[GitHub](src/fundrive/drives/github/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[github]` |
| 6 | **[百度网盘](src/fundrive/drives/baidu/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[baidu]` |
| 7 | **[阿里云盘 (Aligo)](src/fundrive/drives/alipan/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[alipan]` |
| 8 | **[阿里云盘 (Open)](src/fundrive/drives/alipan/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[alipan]` |
| 9 | **[阿里云OSS](src/fundrive/drives/oss/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[oss]` |
| 10 | **[Gitee](src/fundrive/drives/gitee/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[gitee]` |
| 11 | **[WebDAV](src/fundrive/drives/webdav/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[webdav]` |
| 12 | **[pCloud](src/fundrive/drives/pcloud/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[pcloud]` |
| 13 | **[MediaFire](src/fundrive/drives/mediafire/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive` |
| 14 | **[蓝奏云](src/fundrive/drives/lanzou/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[lanzou]` |
| 15 | **[Zenodo](src/fundrive/drives/zenodo/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[zenodo]` |
| 16 | **[本地文件系统](src/fundrive/drives/os/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive` |
| 17 | **[清华云盘](src/fundrive/drives/tsinghua/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[tsinghua]` |
| 18 | **[OpenXLab](src/fundrive/drives/openxlab/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive` |
| 19 | **[天池](src/fundrive/drives/tianchi/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive` |
| 20 | **[文叔叔](src/fundrive/drives/wenshushu/README.md)** | ✅ | ✅ | ✅ | ✅ | 🎉 | `fundrive[wenshushu]` |
### 📋 功能实现详情
#### 核心功能 (BaseDrive 接口)
- **登录认证** (`login`)
- **文件存在检查** (`exist`)
- **文件上传** (`upload_file`)
- **文件下载** (`download_file`)
- **目录创建** (`mkdir`)
- **文件/目录删除** (`delete`)
- **获取文件列表** (`get_file_list`)
- **获取目录列表** (`get_dir_list`)
- **获取文件信息** (`get_file_info`)
- **获取目录信息** (`get_dir_info`)
#### 高级功能
- **文件搜索** (`search`)
- **文件移动** (`move`)
- **文件复制** (`copy`)
- **文件重命名** (`rename`)
- **文件分享** (`share`)
- **获取配额** (`get_quota`)
- **回收站管理** (`get_recycle_list`, `restore`, `clear_recycle`)
- **保存分享** (`save_shared`)
#### 开发规范符合度
- ✅ **完全符合**: 包含标准化示例文件、完整文档、统一测试框架
- ⚠️ **部分符合**: 基本功能实现但缺少示例文件或文档
- ❌ **不符合**: 缺少关键组件或不遵循开发规范
### 🎉 生产就绪驱动 (全部完成!)
所有驱动已完全实现并符合开发规范,推荐在生产环境使用:
#### 🌟 全球主流服务
1. **[Google Drive](src/fundrive/drives/google/README.md)** - 全球最大云存储服务,15GB免费空间,OAuth2认证
2. **[OneDrive](src/fundrive/drives/onedrive/README.md)** - Microsoft云存储服务,与Office深度集成,5GB免费空间
3. **[Dropbox](src/fundrive/drives/dropbox/README.md)** - 老牌云存储服务,同步稳定,2GB免费空间
4. **[Amazon S3](src/fundrive/drives/amazon/README.md)** - 企业级对象存储,支持无限扩展,按使用付费
#### 💻 代码托管平台
5. **[GitHub](src/fundrive/drives/github/README.md)** - 全球最大代码托管平台,1亿+开发者使用
6. **[Gitee](src/fundrive/drives/gitee/README.md)** - 国内领先代码托管平台,访问速度更快
#### 🇨🇳 国内主流服务
7. **[百度网盘](src/fundrive/drives/baidu/README.md)** - 国内最大个人云存储,2TB免费空间
8. **[阿里云盘 (Aligo)](src/fundrive/drives/alipan/README.md)** - 阿里巴巴出品,100GB免费空间,不限速
9. **[阿里云盘 (Open)](src/fundrive/drives/alipan/README.md)** - 开放API版本,企业级功能
10. **[阿里云OSS](src/fundrive/drives/oss/README.md)** - 企业级对象存储,性能稳定,支持多种存储类别
#### 🔧 通用协议和工具
11. **[WebDAV](src/fundrive/drives/webdav/README.md)** - 通用协议,支持多种WebDAV服务器
12. **[pCloud](src/fundrive/drives/pcloud/README.md)** - 欧洲云存储,10GB免费空间,加密存储
13. **[MediaFire](src/fundrive/drives/mediafire/README.md)** - 国外文件分享平台,10GB免费空间
14. **[蓝奏云](src/fundrive/drives/lanzou/README.md)** - 轻量级文件分享,国内访问快
15. **[本地文件系统](src/fundrive/drives/os/README.md)** - 本地文件操作统一接口
#### 🔬 学术和专业服务
16. **[Zenodo](src/fundrive/drives/zenodo/README.md)** - 学术数据存储,开放获取,DOI支持
17. **[清华云盘](src/fundrive/drives/tsinghua/README.md)** - 学术共享平台,只读访问
18. **[OpenXLab](src/fundrive/drives/openxlab/README.md)** - AI模型和数据集平台
19. **[天池](src/fundrive/drives/tianchi/README.md)** - 阿里云大数据竞赛平台
20. **[文叔叔](src/fundrive/drives/wenshushu/README.md)** - 临时文件分享,匿名上传
## 功能特点
- 统一的文件操作接口
- 支持文件和目录的基本操作
- 灵活的文件信息管理
- 完整的网盘功能支持
## 核心功能
### 文件操作
- 文件上传/下载
- 目录创建/删除
- 文件移动/复制
- 文件重命名
- 文件搜索
### 分享功能
- 创建分享链接
- 保存他人分享
- 设置分享密码
- 控制分享有效期
### 回收站管理
- 查看回收站文件
- 恢复已删除文件
- 清空回收站
### 存储管理
- 获取存储配额
- 获取文件下载链接
- 获取文件上传链接
## 安装
> 要求 Python >= 3.12(基础依赖 `funget` 的下限)。
### 加入你的项目(推荐,uv)
```bash
uv add "fundrive[alipan]"
```
### 直接装进当前环境
```bash
uv pip install "fundrive[alipan]"
# 或者:pip install "fundrive[alipan]"
```
### 从源码安装
```bash
uv pip install "git+https://github.com/farfarfun/fundrive.git"
```
### 参与开发
```bash
git clone https://github.com/farfarfun/fundrive.git
cd fundrive
uv sync --group dev # 根据 pyproject.toml 解析依赖,只装核心依赖
uv run pytest # 跑测试
uv run ruff check src tests # lint
uv run ruff format src tests # 格式化
```
## 🚀 快速开始
### 安装
```bash
# 安装基础包
uv add fundrive
# 安装特定驱动(以 Dropbox 为例)
uv add "fundrive[dropbox]"
# 安装 Google Drive 驱动
uv add "fundrive[google]"
# 安装 OneDrive 驱动
uv add "fundrive[onedrive]"
# 安装 Amazon S3 驱动
uv add "fundrive[amazon]"
# 安装清华云盘驱动
uv add "fundrive[tsinghua]"
# 安装文叔叔驱动
uv add "fundrive[wenshushu]"
# 安装多个驱动
uv add "fundrive[dropbox,oss,google,onedrive,amazon,alipan,baidu,lanzou,webdav,wenshushu,tsinghua]"
# 安装全部驱动
uv add "fundrive[all]"
```
### 基本使用
#### 1. Dropbox 示例(推荐)
```python
from fundrive.drives.dropbox import DropboxDrive
# 初始化驱动(凭据在 login() 传入,构造函数不接受凭据参数)
drive = DropboxDrive()
# 登录(不传参时自动从 funsecret 读取已保存的 access_token)
drive.login(access_token="your_dropbox_token")
# 上传文件(远程文件名取本地文件名)
drive.upload_file("/本地路径/文件.txt", "/")
# 下载文件
drive.download_file("/上传文件.txt", filepath="/本地下载路径/文件.txt")
# 获取文件列表
files = drive.get_file_list("/")
for file in files:
print(f"文件名: {file.name}, 大小: {file.size}")
```
#### 2. Google Drive 示例(推荐)
```python
from fundrive.drives.google import GoogleDrive
# 初始化驱动
drive = GoogleDrive(
credentials_file="/path/to/credentials.json",
token_file="/path/to/token.json"
)
# 登录(首次会打开浏览器进行OAuth授权)
drive.login()
# 上传文件(远程文件名取本地文件名)
drive.upload_file("/本地路径/文件.txt", "root")
# 下载文件
drive.download_file("file_id", save_dir="/本地下载路径", filename="下载文件.txt")
# 获取存储配额
quota = drive.get_quota()
print(f"总空间: {quota['total'] / (1024 ** 3):.2f} GB")
print(f"已使用: {quota['used'] / (1024 ** 3):.2f} GB")
# 搜索文件
results = drive.search("关键词", file_type="pdf")
print(f"找到 {len(results)} 个PDF文件")
# 创建分享链接
share_link = drive.share("file_id")
print(f"分享链接: {share_link}")
```
#### 3. OneDrive 示例(推荐)
```python
from fundrive.drives.onedrive import OneDrive
# 初始化驱动
drive = OneDrive(
client_id="your_client_id",
client_secret="your_client_secret",
access_token="your_access_token"
)
# 登录
drive.login()
# 上传文件(支持大文件分块上传)
drive.upload_file("/本地路径/文件.txt", "root", filename="上传文件.txt")
# 下载文件
drive.download_file("file_id", save_dir="/本地下载路径", filename="下载文件.txt")
# 获取存储配额
quota = drive.get_quota()
print(f"总空间: {quota['total'] / (1024 ** 3):.2f} GB")
print(f"已使用: {quota['used'] / (1024 ** 3):.2f} GB")
# 搜索文件
results = drive.search("关键词")
print(f"找到 {len(results)} 个文件")
# 创建分享链接
share_link = drive.share("file_id")
print(f"分享链接: {share_link}")
```
#### 4. Amazon S3 示例(推荐)
```python
from fundrive.drives.amazon import S3Drive
# 初始化驱动
drive = S3Drive(
access_key_id="your_access_key_id",
secret_access_key="your_secret_access_key",
region_name="us-east-1",
bucket_name="your_bucket_name"
)
# 登录
drive.login()
# 上传文件(支持大文件分片上传)
drive.upload_file("/本地路径/文件.txt", "documents", filename="上传文件.txt")
# 下载文件
drive.download_file("documents/上传文件.txt", save_dir="/本地下载路径", filename="下载文件.txt")
# 获取存储桶信息
quota = drive.get_quota()
print(f"存储桶: {quota['bucket_name']}")
print(f"对象数量: {quota['object_count']}")
print(f"总大小: {quota['total_size_gb']} GB")
# 创建分享链接(1小时有效)
share_link = drive.create_share_link("documents/文件.txt", expire_seconds=3600)
print(f"分享链接: {share_link}")
# 搜索文件
results = drive.search("报告", fid="documents")
print(f"找到 {len(results)} 个文件")
```
#### 5. 清华云盘示例
```python
from fundrive.drives.tsinghua import TSingHuaDrive
# 初始化驱动
drive = TSingHuaDrive(
share_key="your_share_key",
password="your_password", # 可选
)
# 登录
drive.login()
# 获取文件列表(只读平台)
files = drive.get_file_list("")
for file in files:
print(f"📄 {file.name} ({file.size} bytes)")
# 下载文件
drive.download_file("文件ID", save_dir="/本地下载路径")
# 搜索文件
results = drive.search("关键词")
print(f"找到 {len(results)} 个文件")
```
#### 6. 文叔叔示例
```python
from fundrive.drives.wenshushu import WSSDrive
# 初始化驱动(匿名登录)
drive = WSSDrive()
# 登录
drive.login()
# 上传文件(支持进度显示)
success = drive.upload_file("/本地文件.txt", "", filename="上传文件.txt")
if success:
print("✅ 文件上传成功")
# 获取已上传文件列表
files = drive.get_file_list("")
for file in files:
print(f"📄 {file.name}")
# 下载文件(通过分享链接)
drive.download_file("分享链接", save_dir="/本地下载路径")
# 获取存储配额
quota = drive.get_quota()
print(f"上传次数: {quota.get('upload_count', 0)}")
```
#### 7. 阿里云 OSS 示例
```python
from fundrive.drives.oss import OSSDrive
# 初始化驱动(凭据在 login() 传入)
drive = OSSDrive()
# 不传参时自动从 funsecret 读取已保存的凭据
drive.login(
access_key="your_access_key",
access_secret="your_secret_key",
bucket_name="your_bucket",
endpoint="oss-cn-hangzhou.aliyuncs.com",
)
# upload_file(本地路径, 目标目录fid),远程文件名取本地文件名
drive.upload_file("/本地文件.txt", "some/dir")
```
#### 8. 使用配置管理(推荐)
```python
# 使用 funsecret 管理配置 - Dropbox
from fundrive.drives.dropbox import DropboxDrive
# 自动从配置中读取 access_token
drive = DropboxDrive()
drive.login()
# 使用 funsecret 管理配置 - Google Drive
from fundrive.drives.google import GoogleDrive
# 预先配置凭据文件路径
# funsecret set fundrive google_drive credentials_file "/path/to/credentials.json"
drive = GoogleDrive() # 自动从配置读取凭据文件路径
drive.login()
# 使用 funsecret 管理配置 - OneDrive
from fundrive.drives.onedrive import OneDrive
# 预先配置OAuth2凭据
# funsecret set fundrive onedrive client_id "your_client_id"
# funsecret set fundrive onedrive client_secret "your_client_secret"
# funsecret set fundrive onedrive access_token "your_access_token"
drive = OneDrive() # 自动从配置读取凭据
drive.login()
```
### 🧪 测试驱动功能
每个生产就绪的驱动都提供了标准化的测试功能:
```bash
# 进入驱动目录 - Dropbox
cd src/fundrive/drives/dropbox
# 运行完整测试
python example.py --test
# 运行快速演示
python example.py --demo
# 进入驱动目录 - Google Drive
cd src/fundrive/drives/google
# 运行完整测试(14项测试)
python example.py --test
# 运行交互式演示
python example.py --interactive
# 进入驱动目录 - OneDrive
cd src/fundrive/drives/onedrive
# 运行完整测试(14项测试)
python example.py --test
# 运行交互式演示
python example.py --interactive
```
## 使用方法
### 核心接口说明
所有驱动都实现了统一的 `BaseDrive` 接口:
```python
# 文件操作
drive.upload_file(local_path, remote_dir, filename) # 上传文件
drive.download_file(remote_path, local_path) # 下载文件
drive.delete(file_or_dir_path) # 删除文件/目录
# 目录操作
drive.mkdir(parent_dir, dir_name) # 创建目录
drive.get_file_list(dir_path) # 获取文件列表
drive.get_dir_list(dir_path) # 获取目录列表
# 信息查询
drive.exist(path) # 检查文件/目录是否存在
drive.get_file_info(file_path) # 获取文件信息
drive.get_quota() # 获取存储配额
# 高级功能
drive.search(keyword, dir_path) # 搜索文件
drive.share(file_path, expire_days=7) # 创建分享链接
drive.copy(src_path, dst_path) # 复制文件
drive.move(src_path, dst_path) # 移动文件
drive.rename(file_path, new_name) # 重命名文件
```
### 文件分享示例
```python
# 创建分享
share_info = drive.share(
"文件ID1", "文件ID2",
password="分享密码",
expire_days=7,
description="分享说明"
)
# 保存他人分享
drive.save_shared(
shared_url="分享链接",
fid="保存到的目录ID",
password="分享密码"
)
```
## 🛠️ 开发者指南
### 实现新的网盘驱动
要实现新的网盘支持,请按照以下步骤:
#### 1. 创建驱动类
```python
from fundrive.core import BaseDrive, DriveFile
from farlog import getLogger
logger = getLogger("fundrive.your_drive")
class YourDrive(BaseDrive):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 初始化您的驱动特定配置
def login(self, *args, **kwargs):
"""登录认证 - 必须实现"""
# 实现登录逻辑
pass
def upload_file(self, local_path, remote_dir, filename=None, *args, **kwargs):
"""文件上传 - 必须实现"""
# 实现文件上传逻辑
pass
def download_file(self, remote_path, local_path, *args, **kwargs):
"""文件下载 - 必须实现"""
# 实现文件下载逻辑
pass
# ... 实现其他必需方法
```
#### 2. 使用通用测试框架
```python
# example.py
from fundrive.core import create_drive_tester
from .drive import YourDrive
def create_test_drive():
"""创建测试驱动实例"""
return YourDrive(your_config_params)
def comprehensive_test():
"""运行综合功能测试"""
drive = create_test_drive()
if not drive:
return False
tester = create_drive_tester(drive, "/test_dir")
return tester.comprehensive_test()
def quick_demo():
"""运行快速演示"""
drive = create_test_drive()
if not drive:
return False
tester = create_drive_tester(drive, "/demo_dir")
return tester.quick_demo()
```
#### 3. 开发规范要求
- ✅ **继承 BaseDrive**: 实现所有抽象方法
- ✅ **错误处理**: 使用 `farlog.getLogger` 记录日志
- ✅ **配置管理**: 集成 `funsecret` 配置管理
- ✅ **中文注释**: 所有注释和错误信息使用中文
- ✅ **示例文件**: 提供标准化的 `example.py`
- ✅ **测试框架**: 使用通用测试框架
- ✅ **文档**: 创建 `README.md` 说明特定配置
### 必须实现的核心方法
| 方法 | 说明 | 必需 |
|:-----|:-----|:----:|
| `login()` | 登录认证 | ✅ |
| `exist()` | 检查文件/目录是否存在 | ✅ |
| `upload_file()` | 文件上传 | ✅ |
| `download_file()` | 文件下载 | ✅ |
| `mkdir()` | 创建目录 | ✅ |
| `delete()` | 删除文件/目录 | ✅ |
| `get_file_list()` | 获取文件列表 | ✅ |
| `get_dir_list()` | 获取目录列表 | ✅ |
| `get_file_info()` | 获取文件信息 | ✅ |
| `get_dir_info()` | 获取目录信息 | ✅ |
### 推荐实现的高级方法
| 方法 | 说明 | 推荐度 |
|:-----|:-----|:------:|
| `search()` | 文件搜索 | ⭐⭐⭐ |
| `share()` | 创建分享链接 | ⭐⭐⭐ |
| `get_quota()` | 获取存储配额 | ⭐⭐⭐ |
| `copy()` | 复制文件 | ⭐⭐ |
| `move()` | 移动文件 | ⭐⭐ |
| `rename()` | 重命名文件 | ⭐⭐ |
### 不支持功能的处理
对于网盘 API 不支持的功能,请提供警告实现:
```python
def get_recycle_list(self, *args, **kwargs):
"""获取回收站文件列表 - 不支持的功能"""
logger.warning("该网盘不支持回收站功能")
return []
def restore(self, fid, *args, **kwargs):
"""恢复文件 - 不支持的功能"""
logger.warning("该网盘不支持文件恢复功能")
return False
```
## 注意事项
- 所有文件和目录操作都基于文件ID(fid)进行
- 文件信息通过 `DriveFile` 类进行封装
- 建议在实现具体网盘接口时添加适当的错误处理
- 注意遵循各网盘服务的使用限制和规范
## 贡献指南
我们欢迎任何形式的贡献!如果您想为 FunDrive 做出贡献,请遵循以下步骤:
1. Fork 项目仓库。
2. 创建一个新的分支 (`git checkout -b feature/your-feature-name`)。
3. 本地验证:`uv sync --group dev && uv run ruff check src tests && uv run pytest`。
4. 提交您的更改,提交信息用中文、格式为 `<类型>: <做了什么>`,并说明修改原因:
```bash
git commit -m "feat: 新增 XX 网盘驱动,补齐登录与上传下载接口"
git commit -m "fix: 修复 Zenodo 驱动把访问令牌写进日志的问题"
git commit -m "docs: 更新驱动开发指南的凭据排查步骤"
```
类型取值:`feat` / `fix` / `docs` / `chore` / `test` / `refactor`。
5. 推送到分支 (`git push origin feature/your-feature-name`)。
6. 创建一个新的 Pull Request。
## 联系我们
如果您有任何问题或建议,请通过 [issues](https://github.com/farfarfun/fundrive/issues) 或 [email](mailto:1007530194@qq.com) 联系我们。
---
感谢您使用统一云存储接口!我们希望这个工具能够简化您的云存储集成工作。
## 参考
百度云盘的 python-api,[官方 API](https://openapi.baidu.com/wiki/index.php?title=docs/pcs/rest/file_data_apis_list)
蓝奏云的 python-api [参考](https://github.com/zaxtyson/LanZouCloud-API)
---
## 关于 farfarfun
[farfarfun](https://github.com/farfarfun) 是一个专注于实用工具库的开源组织,
涵盖云存储、数据处理、AI、多媒体与开发工具链等方向。
- 🏠 组织主页:
- 📦 PyPI:
- 📧 联系:farfarfun@qq.com
本项目基于 [MIT](LICENSE) 协议开源。