Springboot集成Minio

找到我们需要的依赖

打开maven仓库,搜索minio

地址【https://mvnrepository.com/

这里选择的是8.5.1因为有12个人使用,下意识的选择嘿嘿。

<!-- https://mvnrepository.com/artifact/io.minio/minio -->
    <dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.1</version>
    </dependency>

创建一个SpringBoot项目

如图所示,这里就过多的讲解了。

创建好后,添加我们的minio Java SDK的依赖

本项目所使用的依赖

<!--        minio SDK-->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.5.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.12</version>
        </dependency>

YML新增minio配置项

如下图所示

解读一下:

endpoint:是你启动的minio所指定的api接口地址。

获取方式,因为我部署的是docker,启动命令上指定了控制台端口号,以及api端口号,我这边就执行一下docker logs -f --tail 1000 minio查看容器日志的命令。如下图所示,就是我们API地址。

bucketName:就是我们的存储桶的名称。

accessKey:就是我们的访问的key

secretKey:就是我们的密钥。

accessKey和secretKey要么是你的指定的登录用户账号,要么是你添加的Access Keys。

新增MinioConfig

如图所示,新增MinioConfig配置类,Builder一个MinioClient对象交给spring管理。

这个类的意思就是获取我们的yml配置项,Builder一个MinioClient对象交给spring管理。后续我们只需要声明一下MinioClient就可以调用里面的方法了。

代码:

@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {
    private String endpoint;
    private String accessKey;
    private String secretKey;
    private String bucketName;

    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey, secretKey)
                .build();
    }


}

下面会给大家查看构建MinioClient可以通过那些参数构建。

查看MinioClient提供的服务

如下图所示:

点击我们的MinioCilent类,然后点击Structure可以看到下图所示的方法,类等等

下面这个图重点是看MinioCilent的Builder类提供了那些方法builder。

这里就不详细的讲解了,这个类很简单大家有兴趣的可以看看。

查看提供的服务。

可以看到有一大推方法,比喻操作bucket的,操作Object的,甚至还有配置相关的方法。所需的参数,返回值都可以看到。下面我会给大家演部分操作。其余的有兴趣的可以研究一下。

编写MinioService

下面就是MinioService相关代码。

主要就是引入我们的MinioClient对象,还有MinioConfig配置类

调用我们的MinioClient里面的提供的方法。详细请看代码。

package com.example.studyminio.service;

import com.example.studyminio.config.MinioConfig;
import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.Item;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author JiaQIng
 * @Description MinioService
 * @ClassName MinioService
 * @Date 21点19分
 **/
@Service
@RequiredArgsConstructor
public class MinioService {
    private final MinioClient minioClient;
    private final MinioConfig minioConfig;

    /**
     * 查看bucket是否存在
     *
     * @param bucketName
     * @return
     */
    @SneakyThrows
    public Boolean bucketExists(String bucketName) {
        return minioClient.bucketExists(BucketExistsArgs.builder()
                .bucket(bucketName)
                .build());
    }

    /**
     * 创建存储bucket
     *
     * @return Boolean
     */
    @SneakyThrows
    public void makeBucket(String bucketName) {
        minioClient.makeBucket(MakeBucketArgs.builder()
                .bucket(bucketName)
                .build());
    }
    /**
     * 删除存储bucket
     * @return Boolean
     */
    @SneakyThrows
    public void removeBucket(String bucketName) {
       minioClient.removeBucket(RemoveBucketArgs.builder()
                .bucket(bucketName)
                .build());
    }
    /**
     * 获取全部bucket
     */
    @SneakyThrows
    public List<Bucket> listBuckets() {
        return minioClient.listBuckets();
    }


    /**
     * 获取文件的url
     * @param fileName
     * @return
     */
    @SneakyThrows
    public String getPresignedObjectUrl(String fileName){
        GetPresignedObjectUrlArgs build = GetPresignedObjectUrlArgs.builder().bucket(minioConfig.getBucketName()).object(fileName).method(Method.GET).build();
        return minioClient.getPresignedObjectUrl(build);
    }

    /**
     * 查看文件对象
     * @return 存储bucket内文件对象信息
     */
    @SneakyThrows
    public List<Item> listObjects() {
        Iterable<Result<Item>> results = minioClient.listObjects(
                ListObjectsArgs.builder().bucket(minioConfig.getBucketName()).build());
        List<Item> items = new ArrayList<>();
        for (Result<Item> result : results) {
            items.add(result.get());
        }
        return items;
    }

    /**
     * 删除
     * @param fileName
     * @return
     * @throws Exception
     */
    @SneakyThrows
    public void remove(String fileName) {
        minioClient.removeObject(RemoveObjectArgs.builder().
                bucket(minioConfig.getBucketName())
                .object(fileName)
                .build());
    }

}

测试

测试查看bucket是否存在

如下图所示,测试成功。

编写测试方法,测试我们的方法。

代码:

    @Test
    void bucketExists() {
        Boolean test = minioService.bucketExists("test1");
//        Boolean test = minioService.bucketExists("test");
        System.out.println("查看bucket是否存在" + test);
    }
测试创建bucket

如下图所示。

编写我们的测试方法,测试创建bucket是否成功。

我们去到我们的minio控制台查看是否创建了test1的bucket。

看我们的minio控制台已经创建成功了。

代码:

    @Test
    void makeBucket() {
        minioService.makeBucket("test1");
    }
测试删除bucket

如下图所示。

编写我们的测试方法,测试删除bucket是否成功。

我们去到我们的minio控制台查看是否删除了test1的bucket。

可以看到已经成功的删除了test1这个bucket。

代码:

    @Test
    void removeBucket() {
        minioService.removeBucket("test1");
    }
测试获取所有的bucket

如下图所示。

编写我们的测试方法,测试获取所有的bucket是否成功。

我们去到我们的minio控制台查看是否正确。

可以看到是正确的,测试没有问题。

需要注意的是创建时间需要根据时区获取正确的时间。

代码:

    @Test
    void listBuckets() {
        List<Bucket> buckets = minioService.listBuckets();
        buckets.forEach(bucket -> System.out.println("bucket名称" + bucket.name() + "-----bucket创建时间" +bucket.creationDate()));
    }

至此测试完毕,剩下的不给大家演示,毕竟minio SDK提供了太多的方法,本文主要是讲集成,有兴趣的同学可以自己去测试,调用。

总结

本文主要是讲解SpringBoot如何集成Minio的Java SDK。

有不懂的同学可以私信我,评论,看到了会一一答复的。

我们下期再见。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值