Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

QShare

Next.js TypeScript Prisma License: MIT

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 - 完整的认证解决方案

存储服务

  • 对象存储: AWS S3 - 可扩展的对象存储服务
  • 去中心化存储: IPFS - 星际文件系统
  • 缓存: Redis - 内存数据结构存储

开发工具

  • 包管理: 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配置