当前位置:网站首页 > 技术博客 > 正文

上传文件 springboot



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文件上传功能,以及遇到的一些问题和解决方法,希望对大家有所帮助。

  • 上一篇: gee引擎说明书
  • 下一篇: sscom串口助手使用
  • 版权声明


    相关文章:

  • gee引擎说明书2025-04-17 07:30:01
  • opcache_compile_file2025-04-17 07:30:01
  • js怎么注释2025-04-17 07:30:01
  • jstat-gcutil2025-04-17 07:30:01
  • emule服务器地址列表地址2025-04-17 07:30:01
  • sscom串口助手使用2025-04-17 07:30:01
  • java并发编程从入门到精通2025-04-17 07:30:01
  • 计算机专业就业方向及就业前景分析2025-04-17 07:30:01
  • 最新arm+fpga开发板2025-04-17 07:30:01
  • tinyxml读取xml2025-04-17 07:30:01