[7-01-03].SpringBoot3集成MinIo

MinIO学习大纲


一、Spingboot整合MinIo

第1步:搭建SpringBoot项目:

第2步:引入minio依赖

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.jianqun</groupId>
    <artifactId>jianqun-SpringBoot-All</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>


    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>3.2.4</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.5.9</version>
        </dependency>
    </dependencies>

</project>

第3步: 创建MinIoClient客户端:

  • 1.连接minio服务器,创建客户端连接
  • 2.在service层注入MinIo组件:

第4步:编写单元测试:

  • 注入minio客户端组件,进行单元测试

二、SpringBoot集成MinIO开发MinioClient线程安全问题

  • 不存在线程安全问题

三、MinIO中的Bucket和Object解读

  • Bucket 是存储Object的逻辑空间,每个Bucket之间的数据是相互隔离的 ,对用户而言,相当于存放文件的顶层文件夹
  • Object 是存储到MinIO的基本对象 ,对用户而言,相当于文件

四、SpringBoot集成MinIO - Bucket操作:

4.1.API介绍:

  • bucketExists() : 用于检查指定的存储桶是否存在,返回布尔值,表示存储桶是否存在
  • makeBucket() : 用于创建一个新的存储桶(bucket),需要指定存储桶的名称
  • listBuckets(): 用于列出用户有权访问的所有存储桶,返回存储桶的列表
  • removeBucket() : 用于删除一个已存在的存储桶(bucket),删除失败会抛出异常

4.2.使用bucketExists() 案例:

a.编码实现:

java 复制代码
package com.jianqun;


import com.jianqun.service.MinioService;
import io.minio.BucketExistsArgs;
import io.minio.MinioClient;
import io.minio.errors.*;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

@SpringBootTest
public class TestMinio {
    @Resource
    private MinioService minioService;

    @Test
    void contextLoads(){
        minioService.testMinIOClient();
    }


    @Resource
    private MinioClient minioClient;

    @Test
    public void testApi() throws Exception{
        // boolean isBucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket("myFile").build()); //桶的名称有错误,不符合命名规则
        boolean isBucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket("myfile").build());
        System.out.println("myfile目录是否存在" + isBucketExists);
    }
}

b.踩坑说明:

  • 1.在我的测试方法中,我的桶名称一开始是myFile,执行测试方法的时候报错了
  • 2.报错内容如下,其原因是桶名称不符合存Amazon S3 的命名规范
  • 3.Amazon S3 对存储桶名称有一些严格的命名规则,以下是这些规则的简要说明:
    • 长度限制:存储桶名称的长度必须在 3 到 63 个字符之间
    • 字符限制:存储桶名称只能包含小写字母、数字、点(.)和连字符(-)
    • 起始和结束字符:存储桶名称必须以字母或数字开头和结尾
    • 点号限制:存储桶名称中的点号不能连续出现(例如 ...),也不能直接与连字符相邻(例如 .- 或 -.)
    • IP 地址格式:存储桶名称不能格式化为 IP 地址(例如 192.168.1.1)

4.3.使用makeBucket 案例

a.案例实现:

  • 1.使用BucketExistsArgs.builder()来创建Bucket

b.查看页面:

  • 2.执行后页面内容如下:

4.4.使用listBuckets案例

a.案例实现:

b.结果测试:


4.5.使用removeBucket案例


五、SpringBoot集成MinIO开发 - Object操作

5.1.API介绍:

  • putObject():用于上传文件到指定的存储桶
  • uploadObject():用于上传文件到指定的存储桶
  • statObject():用于检查指定的对象(文件)的状态;
  • getPresignedObjectUrl():用于生成一个对象(文件)的签名URL,以便可以通过HTTP访问;
  • getObject():用于从指定的存储桶中下载文件;
  • listObjects():用于列出指定存储桶中的所有对象(文件);
  • removeObject():用于删除指定存储桶中的对象,需要指定存储桶名称和对象键;

5.2.使用putObject案例:

a.案例:

b.测试:

c.说明:


5.2.使用uploadObject案例

a.案例:

b.测试:


5.3.使用statObject案例

a.案例:

c.测试:


5.4.getPresignedObjectUrl()

a.案例:

b.测试:


5.5.SpringBoot集成MinIO开发 - 开放访问Url案例

a.默认情况:

b.实现url直接访问:

1、把存储桶装该改成public的

  • 1.当存储桶的状态是私有状态的时候,所有的图片访问都需要带有否测无法访问,除非把存储桶装该改成public的

2、API方式:

  • 通过客户端API修改

5.6.getObject():

a.案例:


5.7.listObject():

a.案例:


5.8.removeObject:

a.案例:

相关推荐
分布式存储与RustFS1 天前
告别手动配置:用 Terraform 定义你的 RustFS 存储帝国
云原生·wpf·文件系统·terraform·对象存储·minio·rustfs
SirLancelot17 天前
MinIO-基本介绍(一)基本概念、特点、适用场景
后端·云原生·中间件·容器·aws·对象存储·minio
爱刘温柔的小猪12 天前
Python 基于 MinIO 的文件上传服务与图像处理核心实践
python·minio
分布式存储与RustFS16 天前
RustFS与其他新兴存储系统(如SeaweedFS)相比有哪些优势和劣势?
开源软件·文件系统·对象存储·minio·aws s3·seaweedfs·rustfs
休息一下接着来1 个月前
MinIO 分布式模式与纠删码
分布式·minio
wL魔法师1 个月前
minio大文件断点续传
minio
wL魔法师1 个月前
minio 文件批量下载
minio
Kookoos1 个月前
多模联邦查询网关:ABP + Trino/Presto 聚合跨源数据
minio·presto·trino·数据网关·abp vnext·join优化
冷冷的菜哥1 个月前
ASP.NET Core上传文件到minio
后端·asp.net·上传·asp.net core·minio
前端_yu小白2 个月前
大文件上传解决方案
minio·大文件上传·分片上传