add acounts

This commit is contained in:
Julian Freeman
2025-07-03 19:18:36 -04:00
commit 85b97a626c
20 changed files with 965 additions and 0 deletions

187
multidrive_box_prd.md Normal file
View File

@@ -0,0 +1,187 @@
# 🗃️ 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 模拟磁盘
- 用户系统自动分配账号