信息发布→ 登录 注册 退出

手把手教你SpringBoot轻松整合Minio

发布时间:2026-01-11

点击量:
目录
  • 前言
  • 一、技术介绍
    • 1.Minio是什么?
  • 二、使用步骤
    • 1.引入maven库
    • 2.封装Minio
    • 3.配置文件
    • 4.单元测试
  • 总结

    前言

    使用Spring Boot 可以非常方便、快速搭建项目,使我们不用关心框架之间的兼容性,适用版本等各种问题,我们想使用任何东西,仅仅添加一个配置就可以。

    提示:以下是本篇文章正文内容,下面案例可供参考

    一、技术介绍

    1.Minio是什么?

    MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

    二、使用步骤

    1.引入maven库

    代码如下(示例):

    	 	<parent>
    	    <groupId>org.springframework.boot</groupId>
    	    <artifactId>spring-boot-starter-parent</artifactId>
    	    <version>2.4.1</version>
    	    <relativePath/>
    	  </parent>
        <dependencies>
        <dependency>
          <groupId>io.minio</groupId>
          <artifactId>minio</artifactId>
          <version>8.0.3</version>
        </dependency>
      </dependencies>
    

    2.封装Minio

    IFile类:

    package com.hyh.minio;
    
    /**
     * File接口类
     *
     * @Author: heyuhua
     * @Date: 2025/1/12 10:33
     */
    public interface IFile {
    
      /**
       * 上传
       *
       * @param filename 文件名
       */
      void upload(String filename);
    
      /**
       * 上传
       *
       * @param filename 文件名
       * @param object  保存对象文件名称
       */
      void upload(String filename, String object);
    }
    
    
    
    
    
    

    File接口类:

    package com.hyh.minio.service;
    
    import com.hyh.minio.IFile;
    
    /**
     * File接口
     *
     * @Author: heyuhua
     * @Date: 2025/1/12 10:53
     */
    public interface FileService extends IFile {
    
      /**
       * 上传
       *
       * @param filename 文件名称
       * @param object  保存对象文件名称
       * @param bucket  存储桶
       */
      void upload(String filename, String object, String bucket);
    }
    
    
    
    
    
    
    

    File接口实现类:

    package com.hyh.minio.service.impl;
    
    import com.hyh.minio.service.FileService;
    import com.hyh.utils.common.StringUtils;
    import io.minio.BucketExistsArgs;
    import io.minio.MakeBucketArgs;
    import io.minio.MinioClient;
    import io.minio.UploadObjectArgs;
    import io.minio.errors.MinioException;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Service;
    
    import java.io.IOException;
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    
    /**
     * 文件接口服务实现
     *
     * @Author: heyuhua
     * @Date: 2025/1/12 10:53
     */
    @Service
    public class FileServiceImpl implements FileService {
    
      /**
       * 日志
       */
      private static final Logger LOG = LoggerFactory.getLogger(FileServiceImpl.class);
    
      /**
       * minio 客户端
       */
      @Autowired
      private MinioClient minioClient;
    
      /**
       * 默认存储桶名称
       */
      @Value("${minio.bucketName:}")
      private String defaultBucketName;
    
    
      @Override
      public void upload(String filename) {
        uploadObject(filename, null, defaultBucketName);
      }
    
      @Override
      public void upload(String filename, String object) {
        uploadObject(filename, object, defaultBucketName);
      }
    
    
      @Override
      public void upload(String filename, String object, String bucket) {
        uploadObject(filename, object, bucket);
      }
    
      /**
       * 上传
       *
       * @param filename
       * @param object
       * @param bucket
       */
      private void uploadObject(String filename, String object, String bucket) {
        if (StringUtils.isAnyBlank(filename, bucket))
          return;
        try {
          //存储桶构建
          bucketBuild(bucket);
          //保存的文件名称
          object = StringUtils.isBlank(object) ? filename.substring(filename.lastIndexOf("/") > 0 ? filename.lastIndexOf("/") : filename.lastIndexOf("\\")) : object;
    
          minioClient.uploadObject(
              UploadObjectArgs.builder()
                  .bucket(bucket)
                  .object(object)
                  .filename(filename)
                  .build());
        } catch (MinioException | InvalidKeyException | IOException | NoSuchAlgorithmException exception) {
          LOG.error("uploadObject error", exception);
        }
      }
    
    
      /**
       * 存储桶构建
       *
       * @param bucketName
       */
      private void bucketBuild(String bucketName) {
        try {
          boolean found =
              minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
          if (!found) {
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            LOG.info("Bucket " + bucketName + " make success.");
          } else {
            LOG.info("Bucket " + bucketName + " already exists.");
          }
        } catch (MinioException | InvalidKeyException | IOException | NoSuchAlgorithmException exception) {
          LOG.error("bucketBuild error", exception);
        }
      }
    
      public String getDefaultBucketName() {
        return defaultBucketName;
      }
    
      public void setDefaultBucketName(String defaultBucketName) {
        this.defaultBucketName = defaultBucketName;
      }
    }
    
    
    
    
    
    
    

    Minio配置类:

    package com.hyh.minio.config;
    
    import io.minio.MinioClient;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @Author: heyuhua
     * @Date: 2025/1/12 10:42
     */
    @Configuration
    @ConfigurationProperties(prefix = "minio")
    public class MinioConfig {
    
      /**
       * endPoint是一个URL,域名,IPv4或者IPv6地址
       */
      private String endpoint;
    
      /**
       * 端口
       */
      private int port;
    
      /**
       * accessKey类似于用户ID,用于唯一标识你的账户
       */
      private String accessKey;
    
      /**
       * secretKey是你账户的密码
       */
      private String secretKey;
    
      /**
       * 如果是true,则用的是https而不是http,默认值是true
       */
      private Boolean secure;
    
      /**
       * 默认存储桶
       */
      private String bucketName;
    
      /**
       * 配置目录
       */
      private String configDir;
    
      @Bean
      public MinioClient getMinClient() {
        return MinioClient.builder()
            .endpoint(endpoint, port, secure)//http
            .credentials(accessKey, secretKey)
            .build();
      }
    
    
      public String getEndpoint() {
        return endpoint;
      }
    
      public void setEndpoint(String endpoint) {
        this.endpoint = endpoint;
      }
    
      public String getAccessKey() {
        return accessKey;
      }
    
      public void setAccessKey(String accessKey) {
        this.accessKey = accessKey;
      }
    
      public String getSecretKey() {
        return secretKey;
      }
    
      public void setSecretKey(String secretKey) {
        this.secretKey = secretKey;
      }
    
      public Boolean getSecure() {
        return secure;
      }
    
      public void setSecure(Boolean secure) {
        this.secure = secure;
      }
    
      public String getBucketName() {
        return bucketName;
      }
    
      public void setBucketName(String bucketName) {
        this.bucketName = bucketName;
      }
    
      public String getConfigDir() {
        return configDir;
      }
    
      public void setConfigDir(String configDir) {
        this.configDir = configDir;
      }
    
      public int getPort() {
        return port;
      }
    
      public void setPort(int port) {
        this.port = port;
      }
    }
    
    
    
    
    
    
    
    

    Minio助手类封装:

    package com.hyh.minio.helper;
    
    import com.hyh.minio.service.FileService;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    import org.springframework.util.Assert;
    
    /**
     * Minio助手
     *
     * @Author: heyuhua
     * @Date: 2025/1/12 10:54
     */
    @Component
    public class MinioHelper {
    
      /**
       * 日志
       */
      private static final Logger LOG = LoggerFactory.getLogger(MinioHelper.class);
    
      /**
       * 文件接口服务
       */
      @Autowired
      private FileService fileService;
    
    
      /**
       * 上传
       *
       * @param filename
       */
      public void upload(String filename) {
        Assert.notNull(filename, "filename is null.");
        fileService.upload(filename);
      }
    
      /**
       * 上传
       *
       * @param filename
       * @param object
       */
      public void upload(String filename, String object) {
        Assert.notNull(filename, "filename is null.");
        Assert.notNull(object, "object is null.");
        fileService.upload(filename, object);
      }
    
      /**
       * 上传
       *
       * @param filename
       * @param object
       * @param bucket
       */
      public void upload(String filename, String object, String bucket) {
        Assert.notNull(filename, "filename is null.");
        Assert.notNull(object, "object is null.");
        Assert.notNull(bucket, "bucket is null.");
        fileService.upload(filename, object, bucket);
      }
    
    
    }
    
    
    
    
    
    
    
    

    3.配置文件

    代码如下(示例):

    server:
     port: 8088
    #minio配置
    minio:
     endpoint: 39.108.49.252
     port: 9000
     accessKey: admin
     secretKey: admin123
     secure: false
     bucketName: "hyh-bucket"
     configDir: "/home/data/"
    
    

    4.单元测试

    测试代码如下(示例):

    package com.hyh.core.test;
    
    import com.hyh.core.test.base.HyhTest;
    import com.hyh.minio.helper.MinioHelper;
    import org.junit.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    
    /**
     * Minio Test
     *
     * @Author: heyuhua
     * @Date: 2025/1/12 11:54
     */
    public class MinioTest extends HyhTest {
    
      @Autowired
      private MinioHelper minioHelper;
    
      @Test
      public void testUpload() {
        //直接指向你本地的路径测试
        String filename = "E:\\home\\static\\img\\fsPic\\0c34de99ac6b4c56812e83c4eab13a6f.jpg";
        String object = "hyh-test-name.jpg";
        String bucket = "hyh-test-bucket";
        minioHelper.upload(filename);
        minioHelper.upload(filename, object);
        minioHelper.upload(filename, object, bucket);
        //上传完后打开浏览器访问 http://ip:9000 登录控制台可查看上传的文件
      }
    
      @Test
      @Override
      public void test() {
        System.out.println("---minio 测试---");
      }
    }
    
    

    总结

    是不是感觉很简单?关注我带你揭秘更多Minio高级用法 源码地址:点此查看源码.

    以上就是手把手教你SpringBoot轻松整合Minio的详细内容,更多关于SpringBoot整合Minio的资料请关注其它相关文章!

    在线客服
    服务热线

    服务热线

    4008888355

    微信咨询
    二维码
    返回顶部
    ×二维码

    截屏,微信识别二维码

    打开微信

    微信号已复制,请打开微信添加咨询详情!