4.4 KiB
4.4 KiB
🗃️ MultiDrive Box PRD (Product Requirements Document)
🔐 一、产品概述
MultiDrive Box 是一个前后端一体的系统,用于将多个 Google Drive 账号的免费空间联合成一个统一存储池,支持大文件智能分片上传、多账号分布存储、联合下载以及可共享访问。
用户只需上传文件,系统会自动完成压缩、分割、分发与元数据管理。下载者通过一个链接即可还原原始文件,无需了解后台逻辑。
🌟 二、核心功能需求
用户角度
文件上传
- 登录并绑定多个 Google Drive 账号
- 拖拽或选择一个大文件上传
- 系统自动压缩(可选)、分片、上传到各账号
- 显示上传进度
- 上传成功后生成唯一分享链接
文件下载
- 打开分享链接,显示文件名称、大小、分片信息
- 点击下载,系统联合各账号下载分片并合并
- 下载后校验文件整体性
账号管理
- 添加/移除 Google 账号
- 查看每个账号剩余空间
- 查看每个账号中存在的文件分片
🛠️ 三、系统架构设计
用户浏览器
↕️ (HTTP)
Reflex 前端 (Web)
↕️
FastAPI 后端 (REST API)
↕️
SQLite 数据库 + Google Drive API
⚙️ 四、技术标准
| 组件 | 技术选型 |
|---|---|
| 后端框架 | FastAPI |
| 数据库 | SQLite3 |
| 文件分片 | Python: shutil, os, hashlib, tempfile |
| Google Drive API | google-api-python-client |
| 前端框架 | Reflex (Python Web UI) |
| 授权管理 | Google OAuth2 |
| 部署 | Docker / 本地部署 / Cloudflare Tunnel |
📊 五、数据库设计 (SQLite)
1. users
id INTEGER PRIMARY KEY
email TEXT
created_at DATETIME
2. accounts
id INTEGER PRIMARY KEY
user_id INTEGER
google_email TEXT
access_token TEXT
refresh_token TEXT
token_expiry DATETIME
drive_space_total INTEGER
drive_space_used INTEGER
drive_space_reserved INTEGER DEFAULT 1073741824 -- 1GB 预留
3. files
id INTEGER PRIMARY KEY
user_id INTEGER
filename TEXT
original_size INTEGER
sha256 TEXT
upload_time DATETIME
download_token TEXT UNIQUE
4. file_parts
id INTEGER PRIMARY KEY
file_id INTEGER
part_index INTEGER
size INTEGER
account_id INTEGER
drive_file_id TEXT
sha256 TEXT
🔐 六、API 设计 (FastAPI)
| Method | Endpoint | 描述 |
|---|---|---|
| GET | /api/storage-status | 获取所有账号剩余空间 |
| POST | /api/upload-file | 文件上传与分片 |
| GET | /api/file/{token} | 获取分享文件元数据 |
| GET | /api/file/{token}/download | 联合下载文件 |
| POST | /api/add-account | 添加 Google 账号 (OAuth) |
| POST | /api/remove-account | 移除账号 |
🖼️ 七、Reflex 前端页面设计
1. 登录与账号管理
- 显示已绑定账号和空间
- 添加账号(Google OAuth2)
- 支持移除
2. 文件上传
- 拖拽上传区域
- 上传进度条
- 成功后显示分享链接
3. 分享页面
- 显示文件名、大小、分片数
- 点击下载合并文件
🧐 八、上传策略
分片规则
- 获取所有账号剩余空间(-预留1GB)
- 按空间比例分片
- 使用 Python tempfile 创建分片文件
- 分别上传到 Google Drive (MultidriveBox/ 文件夹)
- 记录分片 ID 和元数据
📁 九、下载策略
- 通过分享链接加载分片元数据
- 使用 access token 输出文件分片
- 合并成完整文件
- 下载前校验 SHA256
🦜 十、測試用例
- 上传 <14GB 文件,仅使用一个账号
- 上传 14.5GB 大文件,分片上传到多账号
- 没有剩余空间的规避策略
- 分享链接是否可用,不同浏览器是否适配
- 下载合并文件是否完整
- 删除账号后,文件是否仍可下载
🚀 十一、后续功能设想
- 多云支持(Dropbox, OneDrive)
- 分片加密 / 下载解密
- WebDAV 模拟磁盘
- 用户系统自动分配账号