当前位置: 首页 > article >正文

SpringBoot整合minio服务

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

一、导入依赖

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

二、导入工具类

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

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服务器ip
    private String endpoint="http://192.168.31.208:5000";
    // 桶名
    private String bucketName="minio-test";
    // access key
    private String accessKey="minio-test";
    // secret key
    private 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是否存在,若不存在,则创建bucket
        try {
            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		# 文件的最大尺寸100MB
      max-request-size: 200MB	# 单次请求可以接收文件的最大尺寸为100MB,一般上传视频时会用到

四、上传文件的控制层Controller

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 {

    @Autowired
    private MinioUtil minioUtil;

    @PostMapping("/upload")
    public String upload(MultipartFile file) throws IOException {
        return minioUtil.upload(file);
    }
}

五、测试文件上传


http://www.kler.cn/a/378104.html

相关文章:

  • c语言 变量类型总结
  • 浏览器中的事件循环
  • AI大模型重塑软件开发:从代码自动生成到智能测试
  • Spring的常用注解之@Component——day1
  • leetcode hot100【LeetCode 3. 无重复字符的最长子串】java实现
  • 堆heap的讨论、习题与代码
  • windows下用CMake构建使用protobuf的应用,编译使用VS2022
  • LeetCode 3226. 使两个整数相等的位更改次数
  • UML介绍-不同类间关系
  • 【Linux】从零开始使用多路转接IO --- poll
  • 利用 Direct3D 绘制几何体—8.光栅器状态
  • 刘艳兵-DBA021-升级到Oracle Database 12c时,关于使用Export/Import方法迁移数据的说法是正确的?
  • 第三次RHCSA作业
  • 【vue】11.Vue 3生命周期钩子在实践中的具体应用
  • 《JVM第1课》Java 跨平台原理
  • qt QScrollArea详解
  • Git 的特殊配置文件
  • FPGA实现串口升级及MultiBoot(十一)QuickBoot介绍
  • ‌MySQL中‌between and的基本用法‌、范围查询
  • 干货|前端项目一些响应式布局问题(固定宽度仍可以实现响应式)
  • CTF-pwn:libc2.27指针劫持[gyctf_2020_signin]
  • 通过不当变更导致 PostgreSQL 翻车的案例分析与防范
  • WeakReference与SoftReference以及结合ReferenceQueue实践整理
  • AppInventor2能否用网络摄像头画面作为屏幕的背景?
  • Golang--函数、包、defer、系统函数、内置函数
  • thinkphp8模型中 where数组条件大于,小于,like等条件时与tp5/6 的区别和使用示例