本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。
本文我们使用springboot集成minio,这里我们没有直接使用其starter,因为在maven仓库当中只有两个版本,且使用不广泛。这里我们可以自己写一个starter,其他项目直接引用就可以了。
先说一坑,minio的中文文档版本跟最新的版本完全匹配不上,而英文官网呢,我有始终无法访问,不知道小伙伴是不是碰到同样的问题。
关于minio的搭建参考我的前一篇文章:juejin.cn/post/701800…
话不多说,进入正题。
一、pom依赖
我是用的版本:
1 | xml复制代码<!-- https://mvnrepository.com/artifact/io.minio/minio --> |
这里有一坑啊,本来我使用的是最新的8.3.0版本,当所有代码都写完后,发现启动报错:
1 | markdown复制代码*************************** |
我以为是okhttp这个版本或者包重复的问题,一顿鼓捣,发现没用,最终解决方案是降低了minio的版本到8.2.1,遇到的小伙伴可以尝试降版本。
二、配置文件
我们需要准备以下内容,配置文件yaml中的配置,分别是minio服务地址,用户名,密码,桶名称:
1 | yaml复制代码minio: |
另外一部分,设置spring的上传文件最大限制,如果仍然不行,请考虑是否是网关,或nginx仍然需要配置,nginx配置在最后的配置文件中我给出了100m的大小:
1 | yaml复制代码spring: |
三、配置类
此处工需要两个配置类,分别是属性配置,用来读取yaml的配置;另外是初始化MinioClient到spring容器:
1 | arduino复制代码import lombok.Data; |
1 | kotlin复制代码import io.minio.MinioClient; |
四、工具类
提供一个简易的工具类供其他服务直接调用,包括上传、下载:
1 | ini复制代码import com.baomidou.mybatisplus.core.toolkit.Constants; |
关于上面的下载文件的返回值问题,我们前端统一返回是这样,如果其他项目想要使用可以自行修改啊,直接ResponseBody下载,等等的。此处主要参考如何使用MinioClient上传,下载文件就好了。
五、测试一波
我们使用了springboot集成knife4j,直接通过网关访问接口文档,postman也是一样的啊。我提供下面几个简单的接口来测试一下。
1 | less复制代码 @ApiOperation(value = "minio上传测试") |
接口页面上传文档看看:
一个坑来了,发现返回成功了,文件名称。但是在minio的控制台没有数据啊?
一看后台报错了,好长一片:
1 | php复制代码error occurred |
什么原因呢?因为我的minio是集群模式的,所以我用nginx负载了,此处就报错了,关于错误的nginx配置和如何搭建环境都在我文章看开头提的上一篇文章中。
此处改成单节点的配置立马就好了,由负载端口10000改成单节点端口9000,之后就都ok了,无论上传下载:
1 | yaml复制代码minio: |
如何解决nginx负载的问题呢?
这个问题和nginx反向代理作转发的时候所携带的header有关系,minio在校验signature是否有效的时候,必须从http header里面获取host,而我们这里没有对header作必要的处理。所以我们需要增加以下的配置:
1 | bash复制代码proxy_set_header Host $http_host; |
完整的nginx配置如下:
1 | ini复制代码# For more information on configuration, see: |
再次上传测试,成功了:
到此为止就全部完成啦!需要作为starter的小伙伴不要忘记配置spring.factories.
本文转载自: 掘金