# Minio文件存储系统 **Repository Path**: mingjue/minio-file-storage-system ## Basic Information - **Project Name**: Minio文件存储系统 - **Description**: 使用minio实现的一个简单的文件存储 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-08-01 - **Last Updated**: 2026-08-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MinIO 文件管理系统 基于 Spring Boot + MinIO + MyBatis-Plus 开发的分布式文件管理系统,提供文件上传、下载、预览、检索以及目录管理等功能。 ## 项目简介 本系统是一个完整的文件管理解决方案,采用前后端分离架构,支持多种文件类型预览(文本、图片、PDF、视频、Excel等),具备文件去重、目录树管理、用户认证等核心功能。 ## 技术栈 ### 后端技术 - **Spring Boot 3.0.4** - 基础框架 - **MyBatis-Plus 3.5.5** - ORM 持久层框架 - **MySQL 8.0** - 关系型数据库 - **MinIO 8.3.6** - 对象存储服务 - **JJWT 0.11.5** - JWT 认证 - **EasyExcel 3.3.4** - Excel 文件处理 - **Lombok 1.18.26** - 代码简化 ### 开发工具 - **JDK 17** - Java 开发环境 - **Maven** - 项目构建工具 ## 项目结构 ``` minio/ ├── src/main/java/com/minio/ │ ├── Main.java # 主启动类 │ ├── config/ # 配置类 │ │ ├── MinioConfig.java # MinIO 客户端配置 │ │ └── WebConfig.java # Web 配置 │ ├── constant/ # 常量定义 │ │ └── JwtClaimsConstant.java # JWT 声明常量 │ ├── context/ # 上下文 │ │ └── BaseContext.java # 线程上下文 │ ├── controller/ # 控制层 │ │ ├── DirectoryController.java # 目录管理接口 │ │ ├── MinioController.java # 文件管理接口 │ │ └── UserController.java # 用户管理接口 │ ├── entity/ # 实体类 │ │ ├── StorageDirectory.java # 目录实体 │ │ ├── SysFile.java # 文件实体 │ │ ├── SysUser.java # 用户实体 │ │ ├── dto/ # 数据传输对象 │ │ └── vo/ # 视图对象 │ ├── interceptor/ # 拦截器 │ │ └── JwtTokenInterceptor.java # JWT 拦截器 │ ├── mapper/ # 数据访问层 │ │ ├── StorageDirectoryMapper.java │ │ ├── SysFileMapper.java │ │ └── SysUserMapper.java │ ├── properties/ # 配置属性 │ │ └── JwtProperties.java # JWT 配置属性 │ ├── result/ # 统一响应结果 │ │ └── Result.java # 统一响应封装 │ ├── service/ # 服务层 │ │ ├── StorageDirectoryService.java │ │ ├── SysFileService.java │ │ ├── SysUserService.java │ │ └── impl/ # 服务实现类 │ └── utils/ # 工具类 │ ├── GetFileMD5Util.java # MD5 工具 │ ├── JwtUtil.java # JWT 工具 │ └── MinioUtil.java # MinIO 工具 ├── src/main/resources/ │ ├── mapper/ # MyBatis 映射文件 │ │ ├── StorageDirectoryMapper.xml │ │ ├── SysFileMapper.xml │ │ └── SysUserMapper.xml │ └── application.yml # 应用配置文件 └── pom.xml # Maven 依赖配置 ``` ## 模块说明 ### 1. 用户管理模块 提供用户注册、登录功能,采用 JWT 令牌认证机制。 **核心功能:** - 用户注册:新用户账号创建 - 用户登录:用户身份验证与 JWT 令牌生成 - JWT 认证:基于令牌的请求拦截与验证 **主要接口:** - `POST /user/login` - 用户登录 - `POST /user/register` - 用户注册 ### 2. 目录管理模块 实现目录的创建、查询、树形结构展示等功能。 **核心功能:** - 创建目录:在指定路径创建新目录 - 查询目录:根据目录名称查询目录 - 目录树:递归查询完整的目录树结构 - 根目录:获取系统根目录信息 **主要接口:** - `POST /dir/mkdir` - 创建目录 - `GET /dir/getDir` - 查询目录 - `GET /dir/tree` - 获取目录树 - `GET /dir/root` - 查询根目录 ### 3. 文件管理模块 提供文件的上传、下载、删除、修改、检索、预览等核心功能。 **核心功能:** - 文件上传:支持多种文件类型上传,包含 MD5 去重机制 - 文件下载:下载指定文件到本地 - 文件删除:删除指定文件及数据库记录 - 文件修改:修改文件名称 - 文件检索:根据文件名模糊搜索 - 文件预览:支持文本、图片、PDF、视频、Excel 等格式预览 **主要接口:** - `POST /minio/upload` - 文件上传 - `GET /minio/download` - 文件下载 - `DELETE /minio/delete` - 文件删除 - `POST /minio/update` - 文件修改 - `GET /minio/search` - 文件检索 - `GET /minio/prvFile/{fileName}` - 文件预览 ## 数据库设计 ### 1. sys_user(系统用户表) | 字段名 | 类型 | 说明 | 约束 | |--------|------|------|------| | id | BIGINT | 用户ID | 主键,自增 | | username | VARCHAR(50) | 用户名 | 唯一,非空 | | password | VARCHAR(100) | 加密密码(MD5) | 非空 | | nickname | VARCHAR(50) | 用户昵称 | | | create_time | DATETIME | 创建时间 | | | update_time | DATETIME | 更新时间 | | **建表语句:** ```sql CREATE TABLE sys_user ( id BIGINT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) UNIQUE NOT NULL COMMENT '用户名', password VARCHAR(100) NOT NULL COMMENT '密码(MD5)', nickname VARCHAR(50) COMMENT '用户昵称', create_time DATETIME COMMENT '创建时间', update_time DATETIME COMMENT '更新时间' ) COMMENT='系统用户表'; ``` ### 2. storage_directory(存储目录表) | 字段名 | 类型 | 说明 | 约束 | |--------|------|------|------| | id | BIGINT | 目录ID | 主键,自增 | | dir_name | VARCHAR(100) | 目录名称 | 非空 | | dir_path | VARCHAR(500) | 完整目录路径 | 唯一,非空 | | parent_id | BIGINT | 父目录ID | 0表示根目录 | | bucket_id | BIGINT | 所属存储桶ID | | | full_path_hash | VARCHAR(64) | 完整路径哈希值 | 用于快速查找 | | level | INT | 目录层级 | 根目录为0 | | create_user_id | BIGINT | 创建用户ID | | | update_user_id | BIGINT | 最后更新用户ID | | | create_time | DATETIME | 创建时间 | | | update_time | DATETIME | 更新时间 | | **建表语句:** ```sql CREATE TABLE storage_directory ( id BIGINT PRIMARY KEY AUTO_INCREMENT, dir_name VARCHAR(100) NOT NULL COMMENT '目录名称', dir_path VARCHAR(500) UNIQUE NOT NULL COMMENT '完整目录路径', parent_id BIGINT DEFAULT 0 COMMENT '父目录ID,0表示根目录', bucket_id BIGINT COMMENT '所属存储桶ID', full_path_hash VARCHAR(64) COMMENT '完整路径哈希值', level INT COMMENT '目录层级,根目录为0', create_user_id BIGINT COMMENT '创建用户ID', update_user_id BIGINT COMMENT '最后更新用户ID', create_time DATETIME COMMENT '创建时间', update_time DATETIME COMMENT '更新时间' ) COMMENT='存储目录表'; ``` ### 3. sys_file(系统文件表) | 字段名 | 类型 | 说明 | 约束 | |--------|------|------|------| | id | INT | 主键ID | 主键,自增 | | md5_hash | VARCHAR(32) | MD5哈希值 | 用于文件去重 | | original_name | VARCHAR(255) | 原始文件名 | 非空 | | file_size | BIGINT | 文件大小(字节) | | | storage_path | VARCHAR(500) | MinIO存储路径 | | | file_path | VARCHAR(500) | 文件所在目录路径 | | | directory_id | BIGINT | 目录ID | 关联storage_directory | | file_type | VARCHAR(100) | 文件MIME类型 | | | upload_time | DATETIME | 文件上传时间 | | | upload_count | INT | 文件上传次数 | | | create_user_id | BIGINT | 创建用户ID | | **建表语句:** ```sql CREATE TABLE sys_file ( id INT PRIMARY KEY AUTO_INCREMENT, md5_hash VARCHAR(32) COMMENT 'MD5哈希值(32位),用于文件去重识别', original_name VARCHAR(255) NOT NULL COMMENT '原始文件名,包含扩展名', file_size BIGINT COMMENT '文件大小(字节)', storage_path VARCHAR(500) COMMENT 'MinIO存储路径,包含桶名和对象名', file_path VARCHAR(500) COMMENT '文件所在目录路径', directory_id BIGINT COMMENT '目录ID,关联storage_directory表', file_type VARCHAR(100) COMMENT '文件MIME类型', upload_time DATETIME COMMENT '文件上传时间', upload_count INT DEFAULT 1 COMMENT '文件上传次数', create_user_id BIGINT COMMENT '创建用户ID' ) COMMENT='系统文件表'; ``` ## 功能特性 ### 1. 文件去重机制 - 通过 MD5 哈希值判断文件是否已存在 - 避免重复上传相同文件 - 统计文件上传次数 ### 2. 多格式文件预览 - **图片格式**:jpg、png、gif 等(通过预签名 URL 预览) - **文档格式**:pdf、doc、docx 等(通过预签名 URL 预览) - **视频格式**:mp4、avi 等(通过预签名 URL 预览) - **文本格式**:txt、md、java 等(读取文本内容) - **表格格式**:xls、xlsx(转换为 HTML 格式预览) ### 3. 目录树管理 - 支持多层级目录结构 - 递归查询目录树 - 目录路径快速查找(基于哈希索引) ### 4. JWT 认证 - 用户登录生成 JWT 令牌 - 请求拦截器验证令牌有效性 - 线程上下文存储用户信息 ### 5. 统一响应格式 ```json { "code": 1, // 1: 成功,0: 失败 "msg": "success", // 响应消息 "data": {} // 业务数据 } ``` ## 快速开始 ### 环境要求 - JDK 17+ - Maven 3.6+ - MySQL 8.0+ - MinIO Server ### 安装配置 1. **克隆项目** ```bash git clone [项目地址] cd minio ``` 2. **修改配置文件** 编辑 `src/main/resources/application.yml`: ```yaml # MinIO 对象存储服务配置 minio: endpoint: http://localhost:9000 access-key: minioadmin secret-key: minioadmin bucket-name: mybucket # 数据库配置 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db2024?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC username: root password: 123456 ``` 3. **初始化数据库** - 创建数据库 `db2024` - 执行上述建表语句创建表结构 4. **启动 MinIO 服务** ```bash # Docker 方式启动 docker run -d \ -p 9000:9000 \ -p 9001:9001 \ --name minio \ -e "MINIO_ROOT_USER=minioadmin" \ -e "MINIO_ROOT_PASSWORD=minioadmin" \ minio/minio server /data --console-address ":9001" ``` 5. **创建存储桶** - 访问 MinIO 控制台:http://localhost:9001 - 登录(账号密码:minioadmin) - 创建名为 `mybucket` 的存储桶 6. **编译运行项目** ```bash mvn clean package java -jar target/minio-1.0-SNAPSHOT.jar ``` ### 访问接口 项目启动后,访问地址:`http://localhost:8081` ## 接口文档示例 ### 用户登录 ```http POST /user/login Content-Type: application/json { "username": "admin", "password": "123456" } ``` ### 文件上传 ```http POST /minio/upload Content-Type: multipart/form-data file: [文件内容] directory: /project/docs ``` ### 文件预览 ```http GET /minio/prvFile/document.pdf ``` ### 创建目录 ```http POST /dir/mkdir Content-Type: application/json { "path": "/project/documents" } ``` ## 注意事项 1. **文件上传限制** - 单个文件最大 50MB - 请求最大大小 50MB - 可在 `application.yml` 中调整 2. **JWT 令牌有效期** - 默认 2 小时(7200000 毫秒) - 可在 `application.yml` 中调整 3. **MinIO 连接配置** - 确保 MinIO 服务正常运行 - 存储桶需要提前创建 - 访问密钥需与配置一致 4. **数据库字符集** - 建议使用 UTF-8 字符集 - 时区设置为 UTC ## 开发计划 - [ ] 支持文件分片上传 - [ ] 支持文件批量上传 - [ ] 添加文件分享功能 - [ ] 支持文件版本管理 - [ ] 添加文件访问权限控制 - [ ] 完善文件预览功能(支持更多格式) ## 许可证 本项目仅供学习交流使用。 ## 联系方式 作者:fanlanglang 版本:1.0.0