# WNDS-Server
**Repository Path**: wisterialee/wnds-server
## Basic Information
- **Project Name**: WNDS-Server
- **Description**: WNDS (Wisteria Netdisk System · 紫藤网盘系统) — 基于 RuoYi-Vue 框架二次开发的私有云盘系统。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-09-08
- **Last Updated**: 2026-09-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Java, SpringBoot, MyBatis, MySQL, Spring-MVC
## README
WNDS-Server
Wisteria Netdisk System · 紫藤网盘系统(后端服务)
English | 中文
---
## 项目简介
**WNDS (Wisteria Netdisk System)** 后端服务是一套基于 Spring Boot 生态构建的私有云存储服务端系统,采用经典的前后端分离架构,配合
Vue3 前端实现完整的网盘功能。
系统核心围绕文件资产管理展开,提供文件上传下载、MD5 秒传、断点续传、智能分类、HLS 流媒体转码、文件安全分享(匿名访问 +
提取码)、回收站机制、空间配额管理等一整套网盘服务能力,同时集成了若依框架完善的 RBAC 权限体系、日志审计、系统监控等基础设施。
| 名称 |
Gitee |
Github |
| WNDS-Server |
https://gitee.com/wisterialee/wnds-server |
https://github.com/Wisteria0712/WNDS-Server |
| WNDS-Client |
https://gitee.com/wisterialee/wnds-client |
https://github.com/Wisteria0712/WNDS-Client |
---
## 系统功能
### 网盘核心功能模块
#### 1. 文件管理服务([FileInfoController.java](file:///d:/Project/WNDS/WNDS-Server/wnds-system/src/main/java/com/wisteria/system/controller/FileInfoController.java))
- **文件列表查询**:按用户 ID、父级目录、文件类型(folderType)、文件分类(fileType 10 种)多条件分页查询
- **文件元数据管理**:新增、修改、删除文件记录,支持按 filePid 多级目录树结构
- **文件分类**:自动识别后缀归入 FileTypeEnums(视频 1 / 音频 2 / 图片 3 / PDF 4 / DOC 5 / EXCEL 6 / TXT 7 / CODE 8 / ZIP
9 / 其他 10)
- **新建文件夹**:`POST /createFolder` 快速创建目录
- **文件上传**:`POST /uploadFile`,接收 FileUploadVo + MultipartFile,内部集成 MD5 秒传判定 + 断点续传(返回
UploadResultDto)
- **批量操作**:
- 批量移动(`/batchMove` → BatchMoveVo:fileIdList + filePid + userId)
- 批量逻辑删除(`/batchDelete` → BatchDeleteVo,移入回收站 delFlag=1)
- 批量彻底删除(`/batchDeleteForever`,物理销毁释放空间)
- 批量还原(`/batchRestore` → BatchRestoreVo,按原路径恢复)
- **下载安全机制**(RedisComponent):
- `GET /createDownloadUrl/{fileId}` → 生成一次性下载码(存入 Redis `wnds:download:code:`,5 分钟 TTL)
- `GET /download/{code}` → 校验 Redis 并写文件流,防止链接越权
- **文件流**:`GET /getFile` 直接返回字节流 + `GET /getImagePath` 返回完整 URL
- **导出**:管理员一键导出文件元数据 Excel
#### 2. 上传与下载服务([UploadController.java](file:///d:/Project/WNDS/WNDS-Server/wnds-system/src/main/java/com/wisteria/system/controller/UploadController.java) + RedisComponent)
- **分片上传**:MD5 去重(相同 MD5 只存一份),支持大文件断点续传
- **RedisComponent** 临时文件大小追踪:`wnds:user:file:temp:` 键,1 小时 TTL
- **缩略图生成**:图片缩略图(ImageFileUtils)、视频首帧封面(VideoCoverUtils)
- **流式下载**:支持 HTTP Range 断点续传下载
#### 3. 视频转码与流媒体([VideoProcessUtils.java](file:///d:/Project/WNDS/WNDS-Server/wnds-common/src/main/java/com/wisteria/common/utils/VideoProcessUtils.java) + [VideoCoverUtils.java](file:///d:/Project/WNDS/WNDS-Server/wnds-common/src/main/java/com/wisteria/common/utils/VideoCoverUtils.java))
- **HEVC (H.265) → H.264 自动转码**:兼容浏览器原生播放(FileStatusEnums 三态:转码中/失败/成功)
- **M3U8 流媒体切片**:按 30s 切片生成 TS + M3U8 索引文件,DPlayer 拖动进度即点即播
- **视频封面提取**:截取视频首帧生成封面图
#### 4. 文件分享服务([FileShareController.java](file:///d:/Project/WNDS/WNDS-Server/wnds-system/src/main/java/com/wisteria/system/controller/FileShareController.java))
- **创建分享**:`POST /shareFile`,有效期按 ShareValidTypeEnums:DAY_1(0) / DAY_7(1) / DAY_30(2) / FOREVER(3),自定义或随机
5 位提取码
- **匿名接口组(@Anonymous 注解免鉴权)**:
- `GET /getShareInfo/{shareId}` → 返回 ShareInfoVo(头像 / 昵称 / 分享时间 / 文件名 / 提取码 / 文件ID 等 11 字段)
- `GET /listShareFile` → 分享目录下文件列表(文件夹分享支持进入子目录)
- `GET /createDownloadUrl/{shareId}/{fileId}` → 生成分享下载码
- **分享管理**:列表(按有效期筛选)/ 新增 / 修改 / 删除 / 导出 Excel / 批量取消
#### 5. 回收站与清理机制
- **FileDelFlagEnums 四态**:USING(2) 使用中 → RECYCLE(1) 回收站 → DEL(0) 删除 → DEL_REAL(-1) 彻底删除
- **回收站保留期**:默认 30 天,后端计算剩余天数 ≤10 前端高亮
- **RecycleTask**(Quartz 定时):自动清理超过保留期的回收站文件,物理释放磁盘
#### 6. 用户空间配额服务([UserSpaceController.java](file:///d:/Project/WNDS/WNDS-Server/wnds-system/src/main/java/com/wisteria/system/controller/UserSpaceController.java))
- **查询**:实时统计 user_space 表已用 / 总配额
- **管理员分配**:后台调整用户容量上限
- **兑换码扩容
**([RedeemCodeController.java](file:///d:/Project/WNDS/WNDS-Server/wnds-system/src/main/java/com/wisteria/system/controller/RedeemCodeController.java)):
- 批量生成兑换码(指定容量、有效期)
- 用户输入有效兑换码自动追加 UserSpace
- 支持按使用状态筛选、删除、导出 Excel
#### 7. 邮箱验证码服务([EmailCodeController.java](file:///d:/Project/WNDS/WNDS-Server/wnds-system/src/main/java/com/wisteria/system/controller/EmailCodeController.java))
- **发送场景**:用户注册 + 忘记密码
- **有效期**:默认 15 分钟,三态(已使用 / 未使用 / 已过期)
- **邮件配置
**:[EmailConfig.java](file:///d:/Project/WNDS/WNDS-Server/wnds-system/src/main/java/com/wisteria/system/domain/config/EmailConfig.java)
读取 `spring.mail.username`
- **管理员后台**:查询全量验证码记录 + 导出 Excel
#### 8. 忘记密码服务([SysForgetController.java](file:///d:/Project/WNDS/WNDS-Server/wnds-admin/src/main/java/com/wisteria/web/controller/system/SysForgetController.java))
- `@Anonymous @PostMapping("/forget")` 完全匿名访问
- 流程:邮箱 + 邮箱验证码 + 新密码 → SysForgetService 校验 → BCrypt 更新密码
#### 9. 新年祝福邮件服务([BlessingServiceImpl.java](file:///d:/Project/WNDS/WNDS-Server/wnds-system/src/main/java/com/wisteria/system/service/impl/BlessingServiceImpl.java) + BlessingTask)
- **单用户发送**:sendBlessingEmail(targetMail),通过 JavaMailSender(QQ SMTP SSL:465)
- **批量发送**:遍历 `sysUserMapper.getAllEmail()` 全量用户邮件列表
- **Quartz 定时调度**:`blessingTask.sendBlessingEmail()`,可在若依定时任务管理页配置 Cron
- 标题:「Wisteria Netdisk 新春祝福」
#### 10. 匿名访问体系(@Anonymous 注解)
-
新增注解:[Anonymous.java](file:///d:/Project/WNDS/WNDS-Server/wnds-common/src/main/java/com/wisteria/common/annotation/Anonymous.java)
,可标注类或方法
- 配合 PermitAllUrlProperties 自动放行,无需在 SecurityConfig 中硬编码
- 已应用匿名化的接口:`/forget`、`/share/share/getShareInfo/**`、`/share/share/listShareFile`、
`/share/share/createDownloadUrl/**` 等
---
### 枚举与对象分层体系(domain 目录)
#### 枚举类(domain/enums)
| 枚举类 | 含义 | 成员示例 |
|---------------------|--------------|------------------------------------------------|
| FileCategoryEnums | 文件一级分类(5 类) | VIDEO 1 / MUSIC 2 / IMAGE 3 / DOC 4 / OTHERS 5 |
| FileTypeEnums | 文件二级类型(10 种) | 视频 1→10(细粒度) |
| FileFolderTypeEnums | 是文件还是文件夹 | 0 文件 / 1 文件夹 |
| FileStatusEnums | 文件转码状态 | 转码中 / 失败 / 成功 |
| FileDelFlagEnums | 文件删除标记 | -1 彻底删除 / 0 删除 / 1 回收站 / 2 使用中 |
| ShareValidTypeEnums | 分享有效期类型 | DAY_1 0 / DAY_7 1 / DAY_30 2 / FOREVER 3 |
| UploadStatusEnums | 上传状态 | 秒传成功 / 分片断点 / 上传完成 |
| DateTimePatternEnum | 时间格式枚举 | yyyy-MM-dd HH:mm:ss 等常用模式 |
#### VO 类(domain/vo)
| VO 类 | 用途 |
|----------------|--------------------------------------------------------------------------------------------------------------------------------|
| BatchDeleteVo | 批量删除 / 批量彻底删除参数(fileIdList + userId) |
| BatchMoveVo | 批量移动参数(fileIdList + filePid + userId) |
| BatchRestoreVo | 批量还原参数(fileIdList + userId) |
| FileUploadVo | 文件上传表单参数(filePid / fileMd5 / fileName / fileSize / userId 等) |
| ShareInfoVo | 分享详情返回对象(avatar / nickName / shareTime / fileName / code / fileId / fileSize / folderType / fileType / lastUpdateTime 共 11 字段) |
#### DTO 类(domain/dto)
| DTO 类 | 用途 |
|-----------------|--------------------------------------|
| UploadResultDto | 上传结果返回(fileId + status:秒传成功 / 需续传分片) |
---
### 定时任务(Quartz,3 个 Bean)
| 任务 Bean 方法 | 功能说明 |
|------------------------------------|-------------------------------------|
| `recycleTask` | 定时清理回收站中超过保留期(默认 30 天)的文件,物理释放磁盘空间 |
| `shareTask` | 定时扫描分享链接,将超过有效期的记录自动标记为失效 |
| `blessingTask.sendBlessingEmail()` | 批量发送节日祝福邮件,遍历 sys_user 表所有 email 字段 |
---
### 若依框架基础能力(简化说明)
| 模块 | 核心能力 |
|----------|-------------------------------------------------------------------------|
| 安全认证 | Spring Security + JWT 无状态鉴权,支持多终端 Token,BCrypt 密码加密 + RSA 前端加密传输 |
| RBAC 权限 | 用户 → 角色 → 菜单 三级模型,按钮级细粒度控制,部门数据范围权限 |
| 用户管理 | 增删改查 / 重置密码 / 启停用 / 导入导出 Excel |
| 角色管理 | CRUD / 分配用户 / 菜单权限 / 数据权限范围 |
| 菜单管理 | 动态菜单树 / 外链 / iframe 内嵌 / 缓存刷新 |
| 部门管理 | 组织机构树,部门数据权限 |
| 岗位管理 | 用户岗位职务配置 |
| 字典管理 | 常量化数据维护(valid_type / folder_type / file_type / del_flag 等),前端自动同步缓存 |
| 参数设置 | 运行时动态配置,无需重启 |
| 操作日志 | AOP @Log 切面自动记录,可按业务类型筛选导出 |
| 登录日志 | 记录登录 IP、地点(地址库)、浏览器(UserAgentUtils)、操作系统,异常可视化 |
| 在线用户 | 实时在线用户列表,支持强制踢人下线 |
| 服务监控 | OSHI 采集 CPU / 内存 / JVM / 磁盘 / 网络 |
| 缓存监控 | Redis Key 查询、内存占用、命令统计、热点 Key |
| Druid 监控 | SQL 执行监控、慢 SQL 分析、连接池状态 |
| 代码生成 | 导入表 → 配置 → 一键生成全套 CRUD(Velocity 模板) |
| Swagger3 | SpringFox 自动生成 API 文档,在线调试 |
| Redis 缓存 | RedisCache 抽象层,菜单 / 用户 / 字典 / Token / 下载码自动缓存 |
| 安全防护 | XssFilter 自动转义 / MyBatis #{} 防注入 / RepeatSubmit 防重复提交 / @RateLimiter 限流 |
| 国际化 i18n | 中英文资源文件切换支持 |
---
## 技术栈
### 后端核心技术栈
| 技术 | 版本 | 说明 |
|----------------------------|---------|-------------------------------------------------------|
| **JDK** | 1.8 | 支持 Lambda、Stream、接口默认方法 |
| **Spring Boot** | 2.5.15 | 核心 IoC/AOP + 自动装配 + 起步依赖 |
| **Spring Framework** | 5.3.39 | 底层容器、事务、AOP |
| **Spring Security** | 5.7.12 | 认证 + 授权 + @Anonymous 扩展放行 |
| **JWT (jjwt)** | 0.9.1 | 无状态 Token 签名 / 解析 |
| **MyBatis** | - | ORM 持久层 + PageHelper 1.4.7 物理分页 |
| **MySQL** | 8.x+ | 主数据库(utf8mb4,脚本 `sql/wnds.sql`) |
| **Druid** | 1.2.23 | 阿里数据库连接池 + SQL 执行监控 WallFilter |
| **Redis** | 5.0+ | Lettuce 客户端,缓存 + 分布式锁 + Token + 下载码(5min)+ 临时文件大小(1h) |
| **Quartz** | - | 分布式定时任务调度(Recycle / Share / Blessing 3 任务) |
| **JavaCV Platform** | 1.5.9 | 内置 FFmpeg 全平台二进制,视频转码 H.265→H.264 / M3U8 切片 / 封面提取 |
| **FastJSON2** | 2.0.53 | 高性能 JSON 序列化 |
| **Apache POI** | 4.1.2 | Excel 导入 / 导出(结合 @Excel 注解) |
| **Thumbnailator** | 0.4.19 | 图片缩放缩略图(ImageFileUtils) |
| **Kaptcha** | 2.3.3 | 登录图片验证码(char 字符 / math 数学计算两种模式) |
| **Swagger3 (SpringFox)** | 3.0.0 | REST API 文档自动生成 |
| **Spring Boot Mail** | - | JavaMailSenderImpl + QQ SMTP SSL:465(注册/找回密码/祝福邮件) |
| **OSHI** | 6.6.5 | 硬件信息采集(服务监控页) |
| **UserAgentUtils** | 1.21 | 登录日志解析浏览器/操作系统 |
| **Commons IO** | 2.13.0 | 文件 IO 增强工具 |
| **Velocity** | 2.3 | 代码生成模板引擎 |
| **Logback** | 1.2.13 | 日志框架(按天滚动 INFO / ERROR 分离文件) |
| **Apache Tomcat** | 9.0.102 | 内嵌 Web 容器(默认端口 4399) |
| **BCrypt / RSA jsencrypt** | - | 密码存储加密 + 前端传输非对称加密 |
---
### Maven 多模块结构
```
WNDS-Server/
├── wnds-admin/ # 启动模块
│ └── src/main/java/com/wisteria/
│ ├── WndsApplication.java # Spring Boot 主类
│ └── web/controller/system/
│ ├── SysForgetController # 忘记密码匿名接口(新增)
│ └── ... # 登录 / 注册 / 通用接口
│ └── src/main/resources/
│ ├── application.yml # 端口4399 / wnds.profile / Redis / Spring Mail SSL:465
│ ├── application-druid.yml # MySQL 主从 + Druid 监控
│ ├── mybatis/ # MyBatis 全局配置(驼峰/分页)
│ └── mapper/**/*Mapper.xml # MyBatis 动态 SQL
├── wnds-framework/ # 框架装配层
│ ├── security/ # SecurityConfig + Token 过滤器 + @Anonymous 放行
│ ├── config.properties/ # PermitAllUrlProperties 等
│ └── config/ # Redis/Cache/Filter/线程池/Druid 装配
├── wnds-system/ # 业务核心层
│ ├── component/
│ │ └── RedisComponent.java # 下载码 + 临时文件大小缓存(新增)
│ ├── controller/ # FileInfo/FileShare/Upload/EmailCode/RedeemCode/UserSpace
│ ├── service/ # IBlessingService / IFileInfoService 等 17 个业务接口 + impl
│ │ └── impl/BlessingServiceImpl # 新年祝福邮件服务(新增)
│ ├── mapper/ # 22 个 Mapper 接口
│ └── domain/
│ ├── config/EmailConfig.java # 邮件发件人 YAML 读取(新增)
│ ├── enums/ # 8 个枚举类(FileCategory/Type/DelFlag/Status/ShareValid 等)
│ ├── vo/ # 5 个 VO(BatchDelete/Move/Restore + FileUpload + ShareInfo)
│ ├── dto/UploadResultDto.java # 上传结果(秒传/续传)
│ └── *.java # FileInfo / FileShare / RedeemCode / UserSpace / EmailCode 等实体
├── wnds-quartz/
│ └── task/
│ ├── RecycleTask.java # 回收站超期清理
│ ├── ShareTask.java # 过期分享清理
│ └── BlessingTask.java # 祝福邮件定时触发(新增)
├── wnds-generator/ # 代码生成器
├── wnds-common/ # 通用层
│ ├── annotation/
│ │ └── Anonymous.java # 匿名免鉴权注解(新增)
│ ├── utils/
│ │ ├── VideoProcessUtils.java # FFmpeg 转码 + M3U8 切片
│ │ ├── VideoCoverUtils.java # 视频首帧封面
│ │ └── ImageFileUtils.java # 图片缩略图
│ ├── enums/ / exception/ / filter/# 通用枚举 / 自定义异常 / XssFilter+RepeatableFilter
│ └── core/ # BaseController / AjaxResult / RedisCache 等基础类
├── sql/wnds.sql # 数据库初始化脚本
└── pom.xml # 父 POM,统一依赖版本(1.5.9 等)
```
---
## 快速开始
### 环境准备
| 依赖 | 版本要求 | 说明 |
|--------------|------|------------------------------------------------------------------|
| **JDK** | 1.8+ | 推荐 8u202+,`JAVA_HOME` 必配 |
| **Maven** | 3.6+ | 建议配置 `settings.xml` 阿里云镜像加速 |
| **MySQL** | 8.0+ | 字符集 utf8mb4 |
| **Redis** | 5.0+ | 必须启动;菜单/用户/字典/Token/下载码/临时文件大小全部依赖 Redis |
| **FFmpeg** | - | **无需单独安装**,JavaCV-platform 1.5.9 内置全平台(首次释放本地库约 300MB+,需临时目录写权限) |
| **邮箱账号(可选)** | - | QQ SMTP SSL:465 授权码;用于注册验证码/找回密码/祝福邮件 |
### 数据库初始化
```bash
# 1. 创建数据库(utf8mb4 支持 emoji)
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS wnds DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
# 2. 导入初始化脚本(含表结构 + 默认字典 + admin/admin123)
mysql -u root -p wnds < sql/wnds.sql
```
### 配置修改
修改 `wnds-admin/src/main/resources/` 下的配置文件:
**① application.yml(必改)**
```yaml
wnds:
# 文件存储根目录(Windows 正斜杠或双反斜杠)
profile: D:/Project/WNDS/WNDS-Store
server:
port: 4399
user:
password:
maxRetryCount: 5 # 密码错误 5 次
lockTime: 10 # 锁定 10 分钟
spring:
redis:
host: localhost
port: 6379
password: # 有密码请配置
mail:
host: smtp.qq.com
port: 465
username: your_email@qq.com # 发件邮箱
password: your_smtp_auth_code # QQ 邮箱"授权码",非登录密码
properties.mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
```
**② application-druid.yml(必改)**
```yaml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
master:
url: jdbc:mysql://localhost:3306/wnds?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username: root
password: your_mysql_password
```
### 编译与运行
```bash
# 1. 进入项目根目录
cd WNDS-Server
# 2. 编译打包(跳过测试)
mvn clean package -DskipTests
# 3. 启动(方式一:Maven)
cd wnds-admin && mvn spring-boot:run
# 3. 启动(方式二:Jar 包推荐)
java -Xms512m -Xmx2048m -jar wnds-admin/target/wnds-admin.jar
# 3. 启动(方式三:Windows)
# 双击 bin/run.bat
```
启动成功后访问:
- 后端服务根:http://localhost:4399
- Swagger3 API 文档:http://localhost:4399/swagger-ui/index.html
- Druid 监控台:http://localhost:4399/druid(账号密码见 `application-druid.yml`)
### 默认账号
| 角色 | 用户名 | 密码 |
|-------|-------|----------|
| 超级管理员 | admin | admin123 |
---
## 关于 FFmpeg / JavaCV 视频处理
本项目通过 **JavaCV-Platform 1.5.9** 内嵌 FFmpeg 全平台二进制库,**无需用户手动安装 FFmpeg 命令行工具**。
### 视频处理完整流程
```
用户上传视频(MultipartFile)
↓
保存源文件至 wnds.profile/{userId}/{yyyyMMdd}/{fileId}.{ext}
↓
异步线程(或上传后)触发 VideoProcessUtils
↓
┌──────────────────────────────────────────────────┐
│ 1. ffprobe 探测编码:HEVC(H.265)? │
│ 2. 是 → ffmpeg -c:v libx264 转 H.264 MP4 │
│ 3. 转码 MP4 → 切片 30s/片 → TS + M3U8 索引文件 │
│ 4. VideoCoverUtils 截取首帧 0.5s → JPG 封面图 │
│ 5. 更新 FileInfo.status = FileStatusEnums.SUCCESS│
└──────────────────────────────────────────────────┘
↓
前端 DPlayer + hls.js 读取 M3U8 在线播放 / 图片封面缩略图
```
### 关键类代码链接
- [VideoProcessUtils.java](file:///d:/Project/WNDS/WNDS-Server/wnds-common/src/main/java/com/wisteria/common/utils/VideoProcessUtils.java) —
视频转码 + M3U8 切片
- [VideoCoverUtils.java](file:///d:/Project/WNDS/WNDS-Server/wnds-common/src/main/java/com/wisteria/common/utils/VideoCoverUtils.java) —
视频首帧封面提取
- [ImageFileUtils.java](file:///d:/Project/WNDS/WNDS-Server/wnds-common/src/main/java/com/wisteria/common/utils/ImageFileUtils.java) —
图片缩放缩略图生成
- [FileStatusEnums.java](file:///d:/Project/WNDS/WNDS-Server/wnds-system/src/main/java/com/wisteria/system/domain/enums/FileStatusEnums.java) —
转码三态定义
> 部署注意:Linux 无 GUI 服务器需安装 glibc/libstdc++;首次启动 JavaCV 释放平台动态库到 `java.io.tmpdir`(~
> 300MB),请确保磁盘与权限充足。
---
## 配套项目
- 前端仓库:`../WNDS-Client`(Vue 3.4.31 + Vite 5.3.2 + Element Plus 2.7.6 + Pinia)
- 数据库脚本:`./sql/wnds.sql`
- 使用说明 PDF:`../WNDS网盘系统使用说明v1.0.pdf`
---
## 系统效果图
---
## 关于若依框架
本项目基于 **若依 (RuoYi) v3.8.9** 开源快速开发框架修改而来:
- 后端基础框架:RuoYi-Vue(Spring Boot 2.5.x + Spring Security 5.7 + MyBatis + Redis + JWT + Quartz)
- 前端基础框架:RuoYi-Vue3(Vue3 + Vite + Element Plus)
- 框架官网:[http://www.ruoyi.vip](http://www.ruoyi.vip)
- 开源地址:[https://gitee.com/y_project/RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue)
项目在若依完善的 RBAC 权限、日志审计、代码生成、缓存监控等基础设施之上,扩展了网盘核心业务模块(文件、分享、回收、空间、兑换码、邮件、匿名访问、祝福邮件),大幅提升了开发效率。
由衷感谢若依团队的开源贡献!