SpringBoot3整合MinIO
快速上手MinIO文件服务
配套视频:SpringBoot3整合MinIO
MinIO项目应用可参考视频 【SpringBoot3+Vue3+Uniapp小程序项目实战】
1. 概述
MinIO 是一个基于 Apache License v2.0 开源协议的对象存储服务。它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几 kb 到最大 5T 不等。
优点
-
MinIO 是一个非常轻量的服务。
-
学习成本低,安装运维简单,开箱即用
-
提供 Java 客户端、JS 客户端
下载 https://min.io/
2. 启动服务
打开cmd进入minio目录,执行minio server ./data ,其中data目录为文件存储目录
访问 控制台 http://localhost:9000,用户密码默认均为 minioadmin
3. SpringBoot3整合MinIO
-
pom
<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.0</version> </dependency> <dependency><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-stdlib</artifactId><version>1.3.70</version> </dependency> <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.3.4</version><exclusions><exclusion><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId></exclusion><exclusion><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-stdlib</artifactId></exclusion></exclusions> </dependency>
-
application.yml
my:minio:endpoint: 127.0.0.1 # ip地址port: 9000 # 端口号accessKey: minioadmin # 账号secretKey: minioadmin # 密码secure: false # true代表用的是https,false则用的是http,默认值是truebucketName: "test" # 桶的名字expiry: 8 # 文件url访问有效期,单位小时
-
创建配置类
package com.qqcn.file.config;import io.minio.MinioClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;@Configuration public class MinioConfig {@Value("${my.minio.endpoint}")private String endpoint;@Value("${my.minio.port}")private Integer port;@Value("${my.minio.accessKey}")private String accessKey;@Value("${my.minio.secretKey}")private String secretKey;@Value("${my.minio.secure}")private Boolean secure;@Beanpublic MinioClient minioClient(){return MinioClient.builder().endpoint(endpoint,port,secure).credentials(accessKey, secretKey).build();} }
-
Controller
package com.qqcn.file.controller;import com.qqcn.common.vo.Result; import com.qqcn.file.utils.MinioUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile;import java.util.Map;@RestController @RequestMapping("/file") @Slf4j public class FileController {@Autowiredprivate MinioUtils minioUtils;@PostMapping(value = "/upload", consumes = "multipart/form-data")public Result<Map<String,Object>> upload(@RequestPart("file") MultipartFile file){if(file == null || file.getSize() ==0){return Result.fail("上传文件不能为空文件");}try {Map<String, Object> uploadResult = minioUtils.upload(file);return Result.success(uploadResult);} catch (Exception e) {log.error(e.getMessage());return Result.fail("文件上传失败");}}@GetMapping("/url/{fileName}")public Result<String> getFileUrl(@PathVariable("fileName") String fileName){String url = minioUtils.getUrl(fileName);return Result.success(url,"success");}@DeleteMappingpublic Result<String> deleteFile(@RequestParam("fileName") String fileName){try {minioUtils.removeObject(fileName);} catch (Exception e) {return Result.fail("文件删除失败");}return Result.success();}}