minio:高性能的分布式对象存储
以windos为例:进入官网下载-> 链接:
中文官网http://www.minio.org.cn/download.shtml#/windows
英文官网链接: https://min.io/download#/kubernetes
1.在文件位置打开命令行中启动服务: D:\java\MinioData
2.可打开minio地址访问并操作。用户名和密码默认为:minioadmin
整合spring boot创建箱子进行操作(文件夹)
//添加pom依赖
<!-- Minio-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>*</version>
</dependency>
配置minio
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {
// 主机地址
private String endpoint;
// 端口号
private int port;
// 用户名
private String accessKey;
//密码
private String secretKey;
//minio中的文件夹名称
private String bucketName;
//安全
private Boolean secure;
@Bean
public MinioClient minioClient(){
//minio客户端
MinioClient minioClient=MinioClient.builder().endpoint(endpoint,port,secure)
.credentials(accessKey,secretKey).build();
return minioClient;
}
}
注:如 @ConfigurationProperties(prefix = “minio”) 无效,尝试添加依赖:
<!-- 注解处理器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
YML配置minio主机信息
minio:
endpoint: 127.0.0.1
port: 9100
accessKey: minioadmin
secretKey: minioadmin
bucketName: demo
secure: false
此时,minio已完成配置
:使用minio进行操作
创建minio工具类,进行方法的封装,方便后续操作
@Component
public class MinioUtils {
@Resource
MinioClient minioClient; //注入配置的客户端
@Resource
MinioConfig minioConfig; //读取minio YML配置文件内容
//判断通 是否要创建
@SneakyThrows
public boolean bucketExists(String bucketName) {
boolean flag;
flag=minioClient.bucketExists(BucketExistsArgs
.builder().bucket(bucketName).build());
return flag;
}
//创建桶
@SneakyThrows
public void makeBucket(String bucketName) {
boolean flag = bucketExists(bucketName);
if (!flag) { //true
minioClient.makeBucket(MakeBucketArgs
.builder().bucket(bucketName).build());
}
}
/*封装
*返回桶名字,如果不输入,则使用默认配置的桶名称
*return :String(bucketName)
*/
public String getBucketName(String bucketName){
bucketName=
StringUtils.isNotBlank(bucketName)?bucketName:minioConfig.getBucketName();
//如果输入新的名称,则创建新的bucket
if (!minioUtils.bucketExists(bucketName)){
minioUtils.makeBucket(bucketName);
}
return bucketName;
}
/*上传文件
* */
@SneakyThrows
public void putObject(MultipartFile file,String bucketName,String objectName){
//调用 getBucketName()判断:是否使用新的文件夹,不写则使用默认
bucketName = getBucketName(bucketName);
InputStream inputStream = file.getInputStream(); //文件流
minioClient.putObject(PutObjectArgs.builder() //使用minio客户端put方法
.bucket(bucketName) //桶名称
.object(objectName) //文件名称
.stream(inputStream,file.getSize(),-1)
.contentType(file.getContentType())
.build());
inputStream.close();
}
/*清空文件夹下的所有文件
*先获取文件夹名称,然后遍历所有文件删除
*/
@SneakyThrows
public void removeAllBucket(String bucketName){
Iterable<Result<Item>> results =
minioClient.listObjects(ListObjectsArgs
.builder()
.bucket(bucketName)
.recursive(true).build());
//遍历所有文件
Iterator<Result<Item>> iterator = results.iterator();
while (iterator.hasNext()) {
minioClient.removeObject(RemoveObjectArgs
.builder()
.bucket(bucketName)
.object(iterator.next().get().objectName()) //循环得到的所有文件名
.build());
}
}
//文件预览
//返回预览链接
@SneakyThrows
public String preview(String bucketName,String fileName){
bucketName = getBucketName(bucketName);
try {
String ObjectUrl =
minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs
.builder()
.method(Method.GET)
.bucket(bucketName)
.object(fileName).expiry(7 * 24 * 3600) //预览可用时间
.build());
return ObjectUrl;
}catch (Exception e){
return e.getMessage();
}
}
}
以上就是常用方法,更多请研究minio客户端提供方法
个人总结,仅供参考,如有不足,请指出