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