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

4.4 KiB
Raw Permalink Blame History

🗃️ 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. 分享页面

  • 显示文件名、大小、分片数
  • 点击下载合并文件

🧐 八、上传策略

分片规则

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