Spring Cloud 微服务系列文章,点击上方合集↑
1. 简介
MinIO是高性能、可扩展、云原生支持、操作简单、开源的分布式对象存储产品。
在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品
官网地址:http://www.minio.org.cn/
2. 下载
官网下载(8.4.3版本):http://www.minio.org.cn/download.shtml
网盘下载(推荐):「minio-8.4.3」来自UC网盘分享https://drive.uc.cn/s/6f2c8055cc134
3. 运行
创建四个文件夹data0
、data1
、data2
、data3
,用存放文件。
「启动minio
服务」
# mac/linux
./minio server ./data0 ./data1 ./data2 ./data3
# windows
minio.exe server ./data0 ./data1 ./data2 ./data3
访问地址:http://127.0.0.1:9000/,默认账号和密码都是:minioadmin
。

4. 创建桶
在Minio和其他一些对象存储服务中,”桶”(Bucket)是一个顶层的容器,用于组织和管理存储的对象(Object)。可以将桶类比为文件系统中的文件夹,用于将一组相关的对象进行组织和分类。
每个桶在Minio中具有唯一的名称,并且可以根据需要创建多个桶。用户可以使用桶名称来访问和操作其中的对象。桶名称是全局唯一的,因此需要确保不同应用程序使用不同的桶名称,以避免冲突。
我们创建一个test
的桶(bucket
)。

5. SpringBoot 集成 MinIO
5.1 pom.xml
添加如下minio
依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.4.3</version>
</dependency>
5.2 MinioConfiguration
配置minio的地址、账号和密码,配置上传文件的大小1024M。
@Configuration
public class MinioConfiguration {
private static final String END_POINT = "http://localhost:9000";
private static final String USERNAME = "minioadmin";
private static final String PASSWORD = "minioadmin";
@Bean
public MinioClient minioClient() {
return new MinioClient.Builder()
.endpoint(END_POINT)
.credentials(USERNAME, PASSWORD)
.build();
}
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize(DataSize.ofMegabytes(1024));
factory.setMaxRequestSize(DataSize.ofMegabytes(1024));
return factory.createMultipartConfig();
}
}
5.3 MinioController
upload
上传文件接口:传入参数bucket
,文件保存到minio后会返回fileName
。
getUrl
获取文件访问链接接口:传入参数path
和bucket
,返回可以访问的链接(7天有效)。这里的path
就是上传文件的返回值fileName
。
@RequestMapping("minio")
@RestController
public class MinioController {
@Resource
private MinioClient minioClient;
@PostMapping(value = "upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String upload(@RequestPart("file") MultipartFile file,
@RequestParam("bucket") String bucket) {
try {
int idx = Objects.requireNonNull(file.getOriginalFilename()).lastIndexOf(".");
String suffix = file.getOriginalFilename().substring(idx + 1);
String fileName = UuidUtils.generateUuid() + "." + suffix;
// 保存文件
minioClient.putObject(PutObjectArgs.builder()
.stream(file.getInputStream(), file.getSize(), PutObjectArgs.MIN_MULTIPART_SIZE)
.object(fileName)
.contentType(file.getContentType())
.bucket(bucket)
.build());
return fileName;
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
@GetMapping("getUrl")
public String getUrl(@RequestParam(name = "path") String path,
@RequestParam("bucket") String bucket) {
try {
// 获取文件访问地址 7天失效
String url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
.bucket(bucket)
.object(path).
method(Method.GET)
.expiry(7, TimeUnit.DAYS).build());
return url;
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
}
5.4 okhttp3版本不兼容
如果出现okhttp3版本不兼容的问题,需要在pom.xml
的properties
节点下加上版本号,如下:
<okhttp3.version>4.8.1 </okhttp3.version>
6. Postman测试
6.1 上传接口
接口地址:http://localhost:20000/minio/upload?bucket=test
-
请求头 Content-Type
:multipart/form-data

-
post请求 -
路径 http://localhost:20000/minio/upload?bucket=test
-
请求体为 form-data
,key为file
-
该接口会返回一个唯一的文件path,一般业务会将这个文件path存在数据库中
6.2 下载接口
接口地址:http://localhost:20000/minio/getUrl?bucket=test&path=xxx
-
该接口会返回一个可以访问的下载链接。
7. 有意思的事
7.1 删除自动恢复
可以测试删除其中一半的存放位置,它过一会儿就自动恢复了,比如删除data0和data1,几分钟它就自动重新创建了文件,并且里面的内容也恢复了。
7.2 文件夹
7.3 分块存储
8. 总结
通过Spring Boot集成Minio,我们可以在应用程序中方便地使用Minio的功能,Spring Boot集成Minio可以帮助我们更轻松地开发和管理云存储解决方案。

Spring Cloud 微服务系列 完整的代码在仓库的sourcecode/spring-cloud-demo
目录下。
gitee(推荐):https://gitee.com/cunzaizhe/xiaohuge-blog
github:https://github.com/tigerleeli/xiaohuge-blog
关注微信公众号:“小虎哥的技术博客”,让我们一起成为更优秀的程序员❤️!
原文始发于微信公众号(小虎哥的技术博客):MinIO 分布式文件(对象)存储
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/169688.html