Files
multidrive-box/multidrive_box_prd.md
Julian Freeman 85b97a626c add acounts
2025-07-03 19:18:36 -04:00

188 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🗃️ 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
```sql
id INTEGER PRIMARY KEY
email TEXT
created_at DATETIME
```
### 2. accounts
```sql
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
```sql
id INTEGER PRIMARY KEY
user_id INTEGER
filename TEXT
original_size INTEGER
sha256 TEXT
upload_time DATETIME
download_token TEXT UNIQUE
```
### 4. file\_parts
```sql
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. 分享页面
- 显示文件名、大小、分片数
- 点击下载合并文件
---
## 🧐 八、上传策略
### 分片规则
1. 获取所有账号剩余空间(-预留1GB
2. 按空间比例分片
3. 使用 Python tempfile 创建分片文件
4. 分别上传到 Google Drive (MultidriveBox/ 文件夹)
5. 记录分片 ID 和元数据
---
## 📁 九、下载策略
1. 通过分享链接加载分片元数据
2. 使用 access token 输出文件分片
3. 合并成完整文件
4. 下载前校验 SHA256
---
## 🦜 十、測試用例
- 上传 <14GB 文件,仅使用一个账号
- 上传 14.5GB 大文件,分片上传到多账号
- 没有剩余空间的规避策略
- 分享链接是否可用,不同浏览器是否适配
- 下载合并文件是否完整
- 删除账号后,文件是否仍可下载
---
## 🚀 十一、后续功能设想
- 多云支持Dropbox, OneDrive
- 分片加密 / 下载解密
- WebDAV 模拟磁盘
- 用户系统自动分配账号