SpringBoot整合minio服务

ops/2024/11/2 15:34:47/

 这里我选用的是JDK1.8 + SpringBoot2.3.12.RELEASE

一、导入依赖

java"><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.2.2</version>
</dependency>

二、导入工具类

注意:需要在 endpoint、bucketName、accessKey、secretKey 中指定配置信息

java">import io.minio.*;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;@Component
public class MinioUtil {// minio服务器ipprivate String endpoint="http://192.168.31.208:5000";// 桶名private String bucketName="minio-test";// access keyprivate String accessKey="minio-test";// secret keyprivate String secretKey="minio-test";/*** @param fileInputStream 要上传文件的输入流* @param minioFileName 推送到minio之后的名称* @return*/public String upload(InputStream fileInputStream, String minioFileName){// 1. 拿到minio客户端MinioClient minioClient= MinioClient.builder().endpoint(endpoint).credentials(accessKey,secretKey).build();// 2. 判断bucket是否存在,若不存在,则创建buckettry {if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())){minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());}}catch (Exception e) {e.printStackTrace();};// 3. 上传文件try {minioClient.putObject(PutObjectArgs.builder().object(minioFileName).bucket(bucketName).stream(fileInputStream, fileInputStream.available(), -1).build());}catch (Exception e){e.printStackTrace();System.out.println("上传失败");return null;}String url=endpoint+"/"+bucketName+"/"+minioFileName;return url;}/*** @param multipartFile 要上传的文件* @param minioFileName 要上传到minio的文件名* @return*/public String upload(MultipartFile multipartFile, String minioFileName){String url=null;try {url = upload(multipartFile.getInputStream(),minioFileName);} catch (IOException e) {e.printStackTrace();}return url;}/*** @param multipartFile 要上传的文件*/public String upload(MultipartFile multipartFile){String url=null;try {String minioFileName = UUID.randomUUID() + multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."));url = upload(multipartFile.getInputStream(),minioFileName);} catch (IOException e) {e.printStackTrace();}return url;}/*** 下载文件* @param fromMinioFileName 要下载的minio中的文件名* @param toLocalFileName   下载到本地的位置*/public void download(String fromMinioFileName,String toLocalFileName){// 1.创建minio客户端MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey,secretKey).build();// 2.判断桶是否存在try {if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())){System.out.println(bucketName+" 这个桶不存在!");return;}} catch (Exception e) {e.printStackTrace();}// 3.下载文件try {minioClient.downloadObject(DownloadObjectArgs.builder().bucket(bucketName).object(fromMinioFileName).filename(toLocalFileName).build());} catch (Exception e) {e.printStackTrace();System.out.println(fromMinioFileName+" 下载失败!");}}
}

三、在application.yml文件里添加配置

上传视频时,有的视频内存过大,需要在配置文件中配置最大文件内存上限

spring:servlet:multipart:max-file-size: 200MB		# 文件的最大尺寸100MBmax-request-size: 200MB	# 单次请求可以接收文件的最大尺寸为100MB,一般上传视频时会用到

四、上传文件的控制层Controller

java">import com.xxx.springminio.util.MinioUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;@RestController
public class MinioTestController {@Autowiredprivate MinioUtil minioUtil;@PostMapping("/upload")public String upload(MultipartFile file) throws IOException {return minioUtil.upload(file);}
}

五、测试文件上传


http://www.ppmy.cn/ops/130457.html

相关文章

NET Framework的AOP实施方法1 ContextBoundObject

NET Core的AOP实施方法1 DispatchProxy NET Framework的AOP实施方法1 ContextBoundObject NET Framework的AOP实施方法2 RealProxy 源码见Github ContextBoundObject NET Framework需要实现AOP&#xff0c;可以借助于System.Runtime.Remoting.Contexts命名空间中的ContextBo…

动态ip如何自动更换ip

在探讨如何自动更换动态IP地址时&#xff0c;我们首先需要理解动态IP的基本概念。IP地址&#xff0c;即互联网协议地址&#xff0c;分配给每台连接到互联网的设备的唯一标识符。与传统静态IP地址不同&#xff0c;动态IP地址是由网络服务提供商&#xff08;ISP&#xff09;动态分…

linux命令行的艺术

文章目录 前言基础日常使用文件及数据处理系统调试单行脚本冷门但有用仅限 OS X 系统仅限 Windows 系统在 Windows 下获取 Unix 工具实用 Windows 命令行工具Cygwin 技巧 更多资源免责声明 熟练使用命令行是一种常常被忽视&#xff0c;或被认为难以掌握的技能&#xff0c;但实际…

【Unity实战笔记】第二十二 · 基于SMB的角色控制中遇到的一些问题(斜坡移动鬼畜、落地卡顿、角色突进、头发动画失效等)

【Unity实战笔记】第二一 基于状态模式的角色控制——以UnityChan为例【Unity学习笔记】第十一 动画基础&#xff08;Animation、状态机、root motion、bake into pose、blendTree、大量案例&#xff09; 注&#xff1a; 本文紧接上一篇 Unity实战笔记 第二一&#xff0c;补…

硅谷甄选(三)登录注册

今天跑了步很舒服 一.登录模块 1.1登录路由静态组件 src\views\login\index.vue <template><div class"login_container"><el-row><el-col :span"12" :xs"0"></el-col><el-col :span"12" :xs&quo…

【学习】ZLMediaKit试用

服务端准备 下载ZLMediaKit压缩包&#xff0c;解压 /linux/Release路径下启用MediaServer ./MediaServer -d &/linux/Release路径下config.ini更改配置 也可以将进入web控制台 rtmp默认端口1935, rtsp默认端口554,http默认端口80, SSL默认端口443 进入web控制台 http…

js中什么是闭包,它和柯里化函数有什么关系

在JavaScript中&#xff0c;闭包是一个非常重要的概念&#xff0c;它指的是一个函数和它声明时所处的词法环境的组合。这意味着该函数可以访问并操作它被创建时作用域中的变量&#xff0c;即使它在那个作用域之外被调用。 闭包的定义和特点 访问外部变量&#xff1a;闭包允许…

tornado,flaskd这两个框架主要是干什么的

Tornado是一个Python的Web框架&#xff0c;主要用于构建高性能的异步Web应用程序。它基于非阻塞的网络I/O模型&#xff0c;可以处理大量并发连接&#xff0c;适用于需要处理实时性要求较高的应用场景&#xff0c;如实时聊天、实时数据推送等。 Flask是另一个Python的Web框架&a…