找到我们需要的依赖
打开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。
有不懂的同学可以私信我,评论,看到了会一一答复的。
我们下期再见。