Skip to content

Latest commit

 

History

History
202 lines (157 loc) · 4.43 KB

File metadata and controls

202 lines (157 loc) · 4.43 KB

Cloud Drive - 网盘系统

使用 Everything Skill 构建的全功能网盘系统。

功能特性

  • 用户认证: 注册、登录、JWT token 验证
  • 文件上传: 支持分片上传、断点续传、进度显示
  • 文件管理: 文件夹创建、文件移动、重命名、删除
  • 文件下载: 支持断点续传
  • 文件分享: 生成分享链接、密码保护
  • 存储配额: 用户存储空间管理
  • 回收站: 软删除和恢复功能

技术栈

  • 框架: Next.js 14 (App Router)
  • 语言: TypeScript
  • 数据库: PostgreSQL + Prisma ORM
  • 缓存: Redis
  • 认证: NextAuth.js
  • 样式: Tailwind CSS
  • 测试: Vitest + Playwright

项目结构

cloud-drive/
├── app/                    # Next.js App Router
│   ├── api/               # API Routes
│   │   ├── auth/         # 认证 API
│   │   ├── files/        # 文件管理 API
│   │   └── upload/       # 上传 API
│   ├── drive/            # 网盘主界面
│   └── layout.tsx        # 根布局
├── components/            # React 组件
│   └── file-manager/     # 文件管理组件
├── lib/                   # 工具库
│   ├── auth.ts           # 认证相关
│   ├── db.ts             # 数据库
│   ├── storage.ts        # 文件存储
│   └── validation.ts     # 验证 schema
├── prisma/               # Prisma 配置
│   └── schema.prisma     # 数据库模型
└── types/                # TypeScript 类型

数据库模型

User (用户)

  • id, email, name, password
  • 关联: files, folders, shares, quota

StorageQuota (存储配额)

  • userId, totalSpace, usedSpace
  • 默认 10GB 空间

Folder (文件夹)

  • id, name, parentId (自关联)
  • 支持无限层级嵌套

File (文件)

  • id, name, size, mimeType, storagePath
  • isDeleted, deletedAt (软删除)
  • 关联: folder, user, shares

Share (分享)

  • id, fileId, userId, token
  • password, expiresAt, maxDownloads
  • downloadCount, isActive

快速开始

1. 安装依赖

cd cloud-drive
npm install

2. 配置环境变量

cp .env.local.example .env.local
# 编辑 .env.local 填入你的配置

3. 初始化数据库

npx prisma migrate dev --name init
npx prisma generate

4. 启动开发服务器

npm run dev

5. 访问应用

打开 http://localhost:3000/drive

API 接口

认证

  • POST /api/auth/register - 用户注册
  • POST /api/auth/login - 用户登录
  • POST /api/auth/logout - 用户登出

文件管理

  • GET /api/files - 获取文件列表
  • GET /api/files/[id]/download - 下载文件
  • DELETE /api/upload?fileId= - 删除文件

上传

  • POST /api/upload - 分片上传文件

核心功能实现

分片上传

  1. 前端将文件切分为 1MB 的 chunks
  2. 每个 chunk 单独上传,支持断点续传
  3. 后端保存 chunks 到临时目录
  4. 最后一个 chunk 上传后合并所有 chunks
  5. 创建数据库记录并更新存储配额

存储管理

  • 文件存储在 uploads/{userId}/{fileId}
  • 支持本地文件系统和 S3 兼容存储
  • 软删除机制保护误删文件

安全特性

  • 密码 bcrypt 加密存储
  • JWT token 认证
  • 文件类型验证
  • 存储配额服务端校验
  • 用户数据隔离

测试

单元测试

npm test

E2E 测试

npm run test:e2e

覆盖率检查

npm run test:coverage

部署

Docker 部署

docker-compose up -d

Vercel 部署

vercel --prod

使用 Everything Skill 开发流程

本项目使用 Everything Skill 遵循以下流程开发:

  1. 规划阶段: 使用 /plan 制定详细的项目架构
  2. 数据库设计: 使用 TDD 方式设计 Prisma schema
  3. 后端开发:
    • 使用 /tdd 开发 API (测试优先)
    • 使用 /code-review 审查代码
  4. 前端开发:
    • 使用 /tdd 开发组件
    • 使用 /e2e 生成端到端测试
  5. 集成测试:
    • 使用 /verify 验证完整功能
    • 使用 /orchestrate feature 编排测试流程

待完成的功能

  • 文件夹分享
  • 文件版本历史
  • 图片/视频预览
  • 拖拽上传
  • 批量操作
  • 回收站自动清理
  • 文件搜索
  • 移动端适配

贡献指南

欢迎提交 PR 和 Issue!

许可证

MIT


使用 Everything Claude Code Skill 构建 🚀