1.在Linux中通过docker中拉取minio镜像
可以使用docker images 查看是否有minio镜像,如果有说明已经获取minio镜像了

2.创建一个文件用于存储MinIO的数据
给该文件赋予完全开放的权限
3.启动及配置 MinIo
4.通过日志查看MinIo

5.在window中访问图中的url,切记,切记浏览器访问端口9001,java API端口是9000
访问的url为 虚拟机的ip地址:9001

6.创建自己的Buckets

7.设置Buckets权限为public

8.生成密钥



导入MinIO依赖
配置yml文件
MinIOConfig配置类
文件上传的controller层:
FileStrategy:
MinIOAutoConfigure:
实现文件上传到minIO的主要代码就是putObject()方法

它需要我们创建一个新的对象的构建器(Builder),用于设置上传文件所需的参数
:设置要上传到的MinIO存储桶(bucket)的名称
:设置要上传的对象(文件)的名称,表示文件在存储桶中的路径和名称。
:设置文件的输入流、文件大小以及超时时间。获取文件的输入流,获取文件的大小,表示使用默认的超时时间。
:设置文件的内容类型
运行项目报错:
Caused by: java.lang.RuntimeException: Unsupported OkHttp library found. Must use okhttp >= 4.8.1 at io.minio.S3Base.<clinit>(S3Base.java:106) ... 50 common frames omitted Caused by: java.lang.NoSuchMethodError: kotlin.collections.ArraysKt.copyInto([B[BIII).............
问题需要将okhttp升级4.8.1以上版本
将okhttp升级到4.8.1版本后,还是不行,这时候就要思考是不是okhttp的版本冲突导致,可以通过下载Maven help插件看依赖树,我们可以注意到了报错信息中的NoSuchMethodError: kotlin.collections.ArraysKt.copyInto通过搜索kotlin

发现两个kotlin出现版本不同的问题,所以ArraysKt中找不到copyInto方法。
解决方法:
在 minio 的依赖中排除 okhttp 依赖,再单独引入所需的 okhttp 依赖。在引入的 okhttp 的依赖中排除 kotlin 的依赖,再单独引入所需 kotlin 依赖。
<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.5.2</version> <exclusions> <exclusion> <artifactId>okhttp</artifactId> <groupId>com.squareup.okhttp3</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.8.1</version> <exclusions> <exclusion> <artifactId>kotlin-stdlib</artifactId> <groupId>org.jetbrains.kotlin</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib</artifactId> <version>1.3.70</version> </dependency>
详细可以看springboot引入minio导致的okhttp、kotlin的版本冲突问题_io.minio.s3base.(s3base.java:104)-CSDN博客
如果出现Non-XML response from server的错误,那就很有可能是在yml文件中端口号配置错误了(浏览器访问端口9001,java API端口是9000),我就是端口之前写错过,找了半天qwq。
接下来重新运行项目,应该就不会报错了
通过debug来了解流程
可以通过前端直接发送请求,也可以用postman发送请求,根据自己的情况来




我们可以看到图片已经上传到minio中了

接下来我们通过访问给前端返回url看是否可以查看图片如果可以,就说明成功了,如果不可以,可能是url写错或者忘记在创建PutObjectArgs时使用contentType(file.getContentType())

好了,以上就是根据我的项目来实现MinIo文件上传功能,以及遇到的一些问题和解决方法,希望对大家有所帮助。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/12007.html