基于 Java + Vue3 + MySQL 的网盘服务,支持多空间管理和权限控制。
wf-pan/
├── DESIGN.md # 详细设计文档
├── README.md # 项目说明
├── wf-pan-server/ # 后端服务 (Java/Spring Boot)
│ ├── src/
│ │ └── main/java/com/wildfirechat/pan/
│ │ ├── config/ # 配置类
│ │ ├── controller/ # 控制器
│ │ ├── dto/ # 数据传输对象
│ │ ├── entity/ # 实体类
│ │ ├── repository/ # 数据访问层
│ │ └── service/ # 业务逻辑层
│ ├── src/main/resources/
│ │ └── static/ # 前端静态资源(npm run build 自动生成)
│ ├── pom.xml
│ └── README.md
├── wf-pan-admin/ # 管理后台 (Vue3)
│ ├── src/
│ ├── package.json
│ └── vite.config.js
编辑 wf-pan-server/src/main/resources/application.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/wf_pan?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: your_password创建数据库:
CREATE DATABASE wf_pan CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;im:
admin-url: http://localhost:18080
admin-secret: 123456支持多厂商对象存储:
# 媒体存储配置
# 1: 七牛云存储, 2: 阿里云对象存储, 3: 野火私有对象存储, 4: 对象存储网关
# 5: 腾讯云存储, 6: 华为云存储, 7: AWS S3, 8: 京东云存储
media.type=4
media.server_url=http://localhost:9000
media.access_key=minioadmin
media.secret_key=minioadmin
media.bucket=wf-pan厂商配置示例:
| 类型 | 配置示例 |
|---|---|
| 0 - 未配置 | 不使用对象存储,文件仅保存URL |
| 1 - 七牛云 | media.server_url=http://your-domain.qiniudn.com |
| 2 - 阿里云 | media.aliyun.endpoint=oss-cn-hangzhou.aliyuncs.com |
| 3 - 野火私有 | MinIO兼容,配置media.server_url即可 |
| 4 - 对象存储网关 | MinIO兼容,配置media.server_url即可 |
| 5 - 腾讯云 | media.tencent.region=ap-guangzhou |
| 6 - 华为云 | media.huawei.endpoint=obs.cn-north-4.myhuaweicloud.com |
| 7 - AWS S3 | media.aws.region=us-east-1 |
| 8 - 京东云 | media.jdcloud.endpoint=s3.cn-north-1.jdcloud-oss.com |
# 1. 构建前端(构建成功后自动复制到后端资源目录)
cd wf-pan-admin
npm install
npm run build
# 2. 构建并启动后端
cd ../wf-pan-server
mvn clean package
java -jar target/wf-pan-server-1.0.0.jar- 管理后台:http://localhost:8080/admin/
- 客户端 API:http://localhost:8081
默认管理员:
- 账号:admin
- 密码:admin123
- GLOBAL_PUBLIC: 全局公共空间,所有人可读,全局管理员可写
- USER_PUBLIC: 用户公共空间,所有人可读,用户自己可管理
- USER_PRIVATE: 用户私有空间,仅自己可访问
- DEPT_PUBLIC/DEPT_PRIVATE: 部门空间(预留)
- 客户端使用 IM 的 authCode 认证
- 管理端使用 Session 认证
- 支持多个全局管理员
- 用户空间自动初始化
- 文件夹非空不能删除
- 删除文件时,检查是否还有其他文件引用相同存储URL,无引用时才删除OSS对象
- 支持文件跨空间复制(可配置是否复制物理文件)
- 完整的配额统计
| 端口 | 用途 | 认证方式 | 访问地址 |
|---|---|---|---|
| 8080 | 管理端口 | Cookie/Session | http://localhost:8080/ |
| 8081 | 客户端端口 | Header authCode | http://localhost:8081/api/v1/ |
注意:管理后台前端部署在根路径 /,不是 /admin/
后端
- Java 17
- Spring Boot 3.x
- Spring Data JPA
- MySQL 8.0
- Spring Security Crypto
- MinIO Client (野火私有/网关)
- 七牛云 SDK
- 阿里云 OSS SDK
- 腾讯云 COS SDK
- 华为云 OBS SDK
- AWS S3 SDK
- 京东云 OSS SDK
前端
- Vue 3
- Element Plus
- Pinia
- Vue Router
- Vite
应用启动时会自动:
- 创建数据库表(
spring.jpa.hibernate.ddl-auto: update) - 初始化系统配置(管理员账号密码)
- 创建默认全局管理员(admin/admin123)
- 创建全局公共空间
# 终端1:启动后端(开发模式)
cd wf-pan-server
mvn spring-boot:run
# 终端2:启动前端开发服务器
cd wf-pan-admin
npm run dev前端开发服务器:http://localhost:3000 后端 API:http://localhost:8080 / http://localhost:8081