Minio JavaAPI没有实现相关桶的一系列权限配置,所以自行研发了一套
任何问题可以评论及私信我,公共代码下载资源列表下载或者评论及私信我
Minio实现创建桶、桶存储配置(存储大小、生命周期)、策略配置、用户权限配置,获取桶已使用存储空间及配置总存储空间。
1.需要传的参数封装为实体类
package com.chinaunicom.system.saas.entity;
import lombok.Data;
import org.springframework.stereotype.Component;
@Data
@Component
public class MinioProperties {
//网址
private String endpoint;
//超级用户
private String accessKey;
//超级用户密码
private String secretKey;
//桶名称
private String bucketName;
//桶大小
private long size;
//桶用户
private String userAccessKey;
//桶密码
private String userSecretKey;
//桶用户状态
private String status;
//桶策略名称
private String policyName;
//桶策略
private String policy;
private boolean isGroup;
}
2.MInio接口实现 MinioTemplateService
package com.chinaunicom.system.service;
import com.chinaunicom.system.entity.MinioProperties;
import org.springframework.stereotype.Component;
/**
* renhuifeng
* 桶配置接口
*/
@Component
public interface MinioTemplateService {
/**
* 初始化
* @param minioProperties
*/
public void init(MinioProperties minioProperties);
/**
* 1.创建bucket
*/
public void createBucket(MinioProperties minioProperties) throws Exception;
/**
* 2.存储配额
* @throws Exception
*/
public void setBucketQuota(MinioProperties minioProperties) throws Exception;
/**
* 3.配置生命周期
* @throws Exception
*/
/* public void setBucketExpirationByDays(MinioProperties minioProperties) throws Exception;
*/
/**
* 4.添加用户
* @throws Exception
*/
public void addUser(MinioProperties minioProperties) throws Exception;
/**
* 5.添加策略配置
* @throws Exception
*/
public void addCannedPolicy(MinioProperties minioProperties) throws Exception;
/**
* 6.用户添加策略配置
*
* @throws Exception
*/
public void setPolicy(MinioProperties minioProperties) throws Exception;
/**
* 获取桶信息
* @throws Exception
*/
public long getBucketQuota(MinioProperties minioProperties) throws Exception;
/**
* 总配置
* @param minioProperties
* @throws Exception
*/
public void minioConfig(MinioProperties minioProperties) throws Exception;
/**
* 获取桶所有对象
* @param minioProperties
* @return
* @throws Exception
*/
public long listObjects(MinioProperties minioProperties) throws Exception;
}
3.接口实现类 MinioTemplateServiceImpl
package com.chinaunicom.system.service.impl;
import com.chinaunicom.system.common.CommException;
import com.chinaunicom.system.common.MinioAdminClient;
import com.chinaunicom.system.common.QuotaUnit;
import com.chinaunicom.system.common.UserInfo;
import com.chinaunicom.system.entity.MinioProperties;
import com.chinaunicom.system.service.MinioTemplateService;
import io.minio.*;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;
/**
* renhuifeng
* 同配置实现类
*/
@Slf4j
public class MinioTemplateServiceImpl implements MinioTemplateService {
private MinioClient minioClient;
private MinioAdminClient minioAdminClient;
@Override
public void init(MinioProperties minioProperties) {
minioClient = MinioClient.builder()
.endpoint(minioProperties.getEndpoint())
.credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
.build();
minioAdminClient = MinioAdminClient.builder()
.endpoint(minioProperties.getEndpoint())
.credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
.build();
}
/**
* 1.创建bucket
*/
@Override
public void createBucket(MinioProperties minioProperties) throws Exception {
// 检查存储桶是否已经存在
boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioProperties.getBucketName()).build());
if (isExist) {
log.debug("Bucket already exists.");
} else {
//1.创建桶
String methodName = "createBucket()";
long startTime = System.currentTimeMillis();
try {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioProperties.getBucketName()).build());
} catch (Exception e) {
CommException.handleException(methodName, null, startTime, e);
}
}
}
/**
* 2.存储配额
* @throws Exception
*/
@Override
public void setBucketQuota(MinioProperties minioProperties) throws Exception {
//2.存储配额
String methodName = "setBucketQuota()";
long startTime = System.currentTimeMillis();
try {
minioAdminClient.setBucketQuota(minioProperties.getBucketName(), minioProperties.getSize(), QuotaUnit.KB);
} catch (Exception e) {
CommException.handleException(methodName, null, startTime, e);
}
}
/**
* 3.配置生命周期
*//*
@Override
public void setBucketExpirationByDays(MinioProperties minioProperties) throws Exception {
List<LifecycleRule> rules = new LinkedList<>();
// 配置生命周期规则
rules.add(
new LifecycleRule(
Status.ENABLED, // 开启状态
null,
new Expiration((ZonedDateTime) null, minioProperties.getDays(), null), // 保存365天
new RuleFilter(minioProperties.getPrefix()), // 目录配置
minioProperties.getRuleName(),
null,
null,
null)
);
LifecycleConfiguration lifecycleConfigurationNew = new LifecycleConfiguration(rules);
// 添加生命周期配置
String methodName = "setBucketExpirationByDays()";
long startTime = System.currentTimeMillis();
try {
minioClient.setBucketLifecycle(
SetBucketLifecycleArgs
.builder()
.bucket(minioProperties.getBucketName())
.config(lifecycleConfigurationNew)
.build()
);
} catch (Exception e) {
CommException.handleException(methodName, null, startTime, e);
}
}*/
/**
* 4.添加用户
* @throws Exception
*/
@Override
public void addUser(MinioProperties minioProperties) throws Exception {
//添加用户
String methodName = "addUser()";
long startTime = System.currentTimeMillis();
try {
minioAdminClient.addUser(minioProperties.getUserAccessKey(),
UserInfo.Status.valueOf(minioProperties.getStatus()), minioProperties.getUserSecretKey(),
null, null);
} catch (Exception e) {
CommException.handleException(methodName, null, startTime, e);
}
}
/**
* 5.添加策略配置
* @throws Exception
*/
@Override
public void addCannedPolicy(MinioProperties minioProperties) throws Exception {
//添加策略配置
String methodName = "addCannedPolicy()";
long startTime = System.currentTimeMillis();
try {
minioAdminClient.addCannedPolicy(minioProperties.getPolicyName(), minioProperties.getPolicy().replaceAll("'", "\""));
} catch (Exception e) {
CommException.handleException(methodName, null, startTime, e);
}
}
/**
* 6.用户添加策略配置
*
* @throws Exception
*/
@Override
public void setPolicy(MinioProperties minioProperties) throws Exception {
//添加策略配置
String methodName = "setPolicy()";
long startTime = System.currentTimeMillis();
try {
minioAdminClient.setPolicy(minioProperties.getUserAccessKey(), minioProperties.isGroup(), minioProperties.getPolicyName());
} catch (Exception e) {
CommException.handleException(methodName, null, startTime, e);
}
}
/**
* 获取桶信息
* @throws Exception
*/
@Override
public long getBucketQuota(MinioProperties minioProperties) throws Exception {
//添加策略配置
String methodName = "getBucketQuota()";
long startTime = System.currentTimeMillis();
long bucketQuota = 0;
try {
bucketQuota = minioAdminClient.getBucketQuota(minioProperties.getBucketName());
} catch (Exception e) {
CommException.handleException(methodName, null, startTime, e);
}
return bucketQuota;
}
/**
* 桶一系列操作
* @param minioProperties
* @throws Exception
*/
@Override
public void minioConfig(MinioProperties minioProperties) throws Exception {
init(minioProperties);
createBucket(minioProperties);
setBucketQuota(minioProperties);
//去掉配置生命周期
//setBucketExpirationByDays(minioProperties);
addUser(minioProperties);
addCannedPolicy(minioProperties);
setPolicy(minioProperties);
}
/**
* 获取桶已使用内存
* @throws Exception
*/
@Override
public long listObjects(MinioProperties minioProperties) throws Exception {
init(minioProperties);
String methodName = "listObjects()";
long startTime = System.currentTimeMillis();
long size = 0;
try {
Iterable<Result<Item>> results =
minioClient.listObjects(ListObjectsArgs.builder().bucket(minioProperties.getBucketName()).build());
for (Result<Item> result : results) {
Item item = result.get();
size +=item.size();
}
} catch (Exception e) {
CommException.handleException(methodName, null, startTime, e);
}
return size;
}
}
公共代码段请下载