QShare
QShare 是一个功能丰富的文件共享平台,旨在提供安全、高效、可扩展的文件存储、管理和共享解决方案。
📋 目录
✨ 功能特性
- 📁 文件上传与管理: 支持拖拽上传、批量上传、断点续传,集成 Uppy 文件上传器
- 🔍 多格式文件预览: 内置 PDF、视频、音频、Markdown、Excel、3D 模型等多种格式预览器
- 📊 数据可视化分析: 使用 ECharts 提供详细的访问统计、热门文件排行、访客来源地图可视化
- 🔐 用户认证与授权: 基于 NextAuth 实现安全的用户认证系统,支持多种登录方式
- 🌐 IPFS 集成: 支持去中心化文件存储,提供文件哈希验证和分布式存储选项
- 📱 响应式设计: 采用 Tailwind CSS 和 Shadcn UI,完美适配桌面和移动设备
- 🔧 类型安全 API: 使用 tRPC 构建全类型安全的 API,提供优秀的开发体验
🛠 技术栈
前端技术
- 框架: Next.js 15 - React 全栈框架
- UI 库: React 18 - 用户界面库
- 样式: Tailwind CSS - 实用优先的 CSS 框架
- 组件: Shadcn UI - 可复用的 UI 组件库
- 可视化: ECharts - 强大的数据可视化库
- 文件上传: Uppy - 现代化的文件上传器
后端技术
- API 框架: tRPC - 类型安全的 API 解决方案
- ORM: Prisma - 下一代 Node.js ORM
- 数据库: PostgreSQL - 关系型数据库
- 认证: NextAuth.js - 完整的认证解决方案
存储服务
开发工具
- 包管理: pnpm - 快速、节省磁盘空间的包管理器
- 类型检查: TypeScript - JavaScript 的超集
- 代码格式化: Prettier - 代码格式化工具
- 代码检查: ESLint - 可插拔的 JavaScript 检查工具
🚀 快速开始
环境准备
确保你的系统已安装以下软件:
- Node.js: v18.0 或更高版本
- pnpm: v9.6.0 或更高版本
- PostgreSQL: v12 或更高版本
- Redis: v6 或更高版本(可选,用于缓存)
安装依赖
# 使用 pnpm 安装依赖
pnpm install
配置环境变量
复制环境变量模板文件并配置必要的参数:
# 复制环境变量模板
cp .env.example .env.local
编辑 .env.local 文件,配置以下必要的环境变量:
# 数据库配置
DATABASE_URL="postgresql://username:password@localhost:5432/qshare"
# NextAuth 配置
NEXTAUTH_SECRET="your-secret-key-here"
NEXTAUTH_URL="http://localhost:8004"
# AWS S3 配置(文件存储)
AWS_ACCESS_KEY_ID="your-aws-access-key"
AWS_SECRET_ACCESS_KEY="your-aws-secret-key"
AWS_REGION="us-east-1"
AWS_BUCKET_NAME="your-bucket-name"
# Redis 配置(缓存)
REDIS_URL="redis://localhost:6379"
# 应用配置
APP_URL="http://localhost:8004"
数据库迁移
运行数据库迁移命令来创建数据库表结构:
# 推送Prisma schema到数据库
pnpm db:push
# 或者运行迁移(推荐用于生产环境)
pnpm db:migrate
# 启动Prisma Studio查看数据
pnpm db:studio
启动开发服务器
启动开发服务器开始使用 QShare:
# 启动开发服务器(端口8004)
pnpm dev
应用将在 http://localhost:8004 启动,你可以通过浏览器访问。
📁 项目结构
qshare/
├── prisma/ # 数据库schema和迁移文件
│ ├── schema.prisma # Prisma数据模型定义
│ └── migrations/ # 数据库迁移历史
├── public/ # 静态资源文件
│ ├── icons/ # 应用图标
│ └── images/ # 图片资源
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── api/ # API路由(包含tRPC)
│ │ │ ├── auth/ # 认证相关API
│ │ │ ├── upload/ # 文件上传API
│ │ │ ├── stat/ # 统计API
│ │ │ └── trpc/ # tRPC路由
│ │ ├── dashboard/ # 仪表盘页面
│ │ ├── [slug]/ # 文件查看页面
│ │ └── layout.tsx # 应用布局
│ ├── components/ # 可复用UI组件
│ │ ├── ui/ # Shadcn UI基础组件
│ │ ├── dashboard/ # 仪表盘专用组件
│ │ └── upload/ # 文件上传组件
│ ├── lib/ # 工具函数和工具类
│ │ ├── auth.ts # 认证工具
│ │ ├── db.ts # 数据库工具
│ │ ├── s3.ts # S3存储工具
│ │ └── utils.ts # 通用工具函数
│ ├── server/ # 服务端代码
│ │ ├── api/ # tRPC API定义
│ │ └── auth/ # 认证配置
│ ├── styles/ # 全局样式
│ └── types/ # TypeScript类型定义
├── package.json # 项目依赖配置
├── tsconfig.json # TypeScript配置
├── tailwind.config.ts # Tailwind CSS配置
└── next.config.js # Next.js配置