# Disk网盘 **Repository Path**: Lmpetprint/disk-cloud ## Basic Information - **Project Name**: Disk网盘 - **Description**: 基于springboot+vue3+minio+redis+rabbitmq实现的网盘系统 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2025-06-01 - **Last Updated**: 2025-10-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 轻享、简约 | Disk网盘 因为不想每次下载学习资料的时候都被限速(不想多说某些网盘),于是有了这个系统,本人的毕业设计系统,拿来练练手,因为想拥有一个属于自己的网盘系统,这是一个基于 Spring Boot + Vue3 + Redis + Netty + RabbitMQ 实现的个人轻量级网盘系统,聚焦文件管理核心需求,支持文件分类整理、秒传加速、实时聊天及异步消息处理,打造简洁高效的个人云存储体验。 ## 📌 项目简介 轻享网盘是面向个人用户的私有云存储工具,主打 “简洁、高效、易用”。核心功能覆盖日常文件管理(分类 / 重命名 / 删除 / 下载),通过 Redis 实现文件 MD5 秒传(相同文件无需重复上传),集成 Netty 提供实时聊天功能(可与文件分享结合),并利用 RabbitMQ 异步处理文件元数据存储、聊天消息持久化等任务,平衡性能与用户体验。 ## 🛠️ 技术栈 ### 后端(Java) | 技术组件 | 版本 | 说明 | | ----------- | ------------ | ----------------------------- | | Spring Boot | 2.6.13 | 核心框架,提供 MVC 与自动配置 | | MyBatis | 3.5.3 | ORM 框架,简化数据库操作 | | MySQL | 8.0.30 | 主数据库,存储文件元数据 | | Redis | 7.0.11 | 缓存文件 MD5 标识(秒传核心) | | Netty | 4.1.96.Final | 实现 WebSocket 实时聊天 | | RabbitMQ | 3.12.4+ | 消息持久化 | | Minio | 7.1.10 | 存储文件 | ### 前端(Vue3) | 技术组件 | 版本 | 说明 | | ---------------- | ------ | --------------------------------- | | Vue3 | 3.3.10 | 前端框架 | | Vue Router | 4.2.5 | 路由管理 | | Pinia | 2.1.6 | 状态管理 | | Vite | 5.0.11 | 构建工具 | | Element Plus | 2.4.9 | 组件库(文件列表 / 操作面板) | | Axios | 1.6.2 | 网络请求 | | Socket.IO Client | 4.7.2 | 前端 WebSocket 客户端(聊天功能) | ## ✨ 核心功能 ### 1. 文件基础管理 - **分类整理**:支持自定义文件夹分类(如 “文档”“图片”“视频”),支持多级目录嵌套 - **基础操作**:文件 / 文件夹重命名、删除、下载(单文件 / 批量),支持拖拽排序 - **文件预览**:自动识别图片(JPG/PNG)、文本(TXT)、PDF 格式,点击直接预览 ### 2. 秒传加速 - **MD5 校验**:上传文件时自动计算 MD5 哈希值,若 Redis 已存在相同 MD5 标识,直接关联已有文件(无需重复上传) - **秒传提示**:前端实时反馈 “文件已存在,将自动关联”,上传耗时从分钟级降至秒级 ### 3. 实时聊天 - **WebSocket 长连接**:基于 Netty 实现,支持在线用户实时聊天(可发送文字、文件链接) - **消息持久化**:聊天记录通过 RabbitMQ 异步写入数据库,重启后可查看历史消息 ## 📋 环境要求 | 环境 | 版本要求 | 说明 | | -------- | ------------- | ------------------------------- | | JDK | 1.8 | Spring Boot 2.x 依赖 | | Maven | 3.8.6+ | 依赖管理 | | Node.js | 18.16.0+ | 前端构建 | | MySQL | 8.0+ | 存储文件元数据与聊天记录 | | Redis | 6.2+ | 缓存 MD5 标识(秒传核心) | | RabbitMQ | 3.10+ | 需安装 rabbitmq-management 插件 | | Netty | 4.1.96.Final+ | 无需单独部署,后端集成 | | Minio | 7.1.10 | 存储文件 | ## 🚀 部署步骤 ### 1. 初始化系统 - 执行 `sql/Disk.sql` 初始化表结构 - 修改 ``` resources目录下的文件 ``` 1.disk-admin(文件存储服务): ​ application-dev.yml: ```yaml # 端口 server: # port: 9000 port: 8089 # sa-token 配置 sa-token: # token 名称 (同时也是 cookie 名称) token-name: Authorization # token 有效期(单位:秒) 默认30天,-1 代表永久有效 timeout: 2592000 # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 active-timeout: -1 # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) is-concurrent: false # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token) is-share: true # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) token-style: uuid # 是否输出操作日志 is-log: true spring: datasource: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://localhost:3306/disk?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: root # redis配置 redis: # Redis数据库索引(默认为0) database: 0 # Redis服务器地址 host: localhost # Redis服务器连接端口 port: 6379 # Redis服务器连接密码(默认为空) password: # 连接超时时间 timeout: 10s lettuce: pool: # 连接池最大连接数 max-active: 200 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # 连接池中的最大空闲连接 max-idle: 10 # 连接池中的最小空闲连接 min-idle: 0 minio: endpoint: http://localhost:9000 accessKey: secretKey: bucketName: ``` 2.disk-chat(实时聊天服务): ​ application.yml: ```yaml server: port: 8086 # Netty服务配置 netty: port: 9001 # websocket-path: /chat spring: datasource: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://localhost:3306/disk?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: 123 rabbitmq: host: localhost port: 5672 username: root password: root virtual-host: / listener: simple: #消费者最小数量 concurrency: 10 #消费者最大数量 max-concurrency: 10 #限制消费者,每次只能处理一条消息,处理完才能继续下一条消息 prefetch: 1 #启动时是否默认启动容器,默认为 true auto-startup: true #被拒绝时重新进入队列的 default-requeue-rejected: true # 消息重试配置 template: retry: #启用消息重试机制,默认为 false enabled: true #初始重试间隔时间 initial-interval: 1000ms #重试最大次数,默认为 3 次 max-attempts: 3 #重试最大时间间隔,默认 10000ms max-interval: 10000ms #重试的间隔乘数 #配置 2 的话,第一次等 1s,第二次等 2s,第三次等 4s multiplier: 1 # Redis配置(与主模块一致) redis: host: localhost port: 6379 password: database: 1 # sa-token 配置 sa-token: # token 名称 (同时也是 cookie 名称) token-name: Authorization # token 有效期(单位:秒) 默认30天,-1 代表永久有效 timeout: 2592000 # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结 active-timeout: -1 # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录) is-concurrent: false # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token) is-share: true # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik) token-style: uuid # 是否输出操作日志 is-log: true logging: level: com.clx.disk: debug ``` ### 2. 启动Rabbitmq、Redis、minio ​ 这里推荐可以在虚拟机中一键安装,可以使用docker安装redis以及rabbtimq,这里不过多赘述,网上有很多教程 ### 3. 运行后端 ​ 打开idea,分别启动disk-chat以及disk-admin就可以 ### 4. 运行前端服务 ​ 用命令行或者vscode打开,允许以下命令: ```bash npm install npm run dev ``` 前端访问地址:`http://localhost:5173` ## 📁 项目结构 ```plaintext lightshare/ ├─ .git/ # 版本控制(Git) ├─ .idea/ # IDEA 配置(可选) ├─ disk-admin/ # 后端核心模块(文件管理、秒传逻辑、API 接口) ├─ disk-chat/ # 实时聊天模块(Netty 服务端,WebSocket 通信) ├─ disk-common/ # 公共模块(工具类、Redis/RabbitMQ 配置、通用枚举) ├─ disk-ui/ # 前端 UI(Vue3 + Element Plus,文件操作与聊天界面) ├─ sql/ # 数据库脚本(MySQL 表结构初始化) ├─ pom.xml # Maven 父工程(聚合后端模块,统一依赖管理) └─ README.md # 项目说明文档 ``` ## 📘 演示图片 ### 1.登录页面 ![](image/登录.png) ### 2.首页 ![](image/首页.png) ### 3.文件分类展示 ![](image/文件分类.png) ### 4.实时聊天 ![](image/实时聊天.png) ### 5.用户互传文件 ![](image/互传文件.png) ## ⚠️ 注意事项 1. **系统配置**:强烈建议在虚拟机中启动Mysql、Rabbitmq、Minio以及redis服务 2. **聊天配置**:Rabbitmq的交换机以及队列要一一对应 3. **文件存储路径**:默认存储minio中 ## 📧 联系与反馈 ​ 如果系统有什么问题,可以发邮箱给我,我都会看的 - 个人邮箱:chelongxiang@163.com ## 🧨打赏 > ### 请作者喝杯咖啡吧~ > >