# 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 Logo

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 权限、日志审计、代码生成、缓存监控等基础设施之上,扩展了网盘核心业务模块(文件、分享、回收、空间、兑换码、邮件、匿名访问、祝福邮件),大幅提升了开发效率。 由衷感谢若依团队的开源贡献!