华为云对象存储服务中的桶,可以设置标签 ,通过标签进行管理和分类
设置新标签
public BucketTagInfo.TagSet newTagSet(){
BucketTagInfo.TagSet tagSet = new BucketTagInfo.TagSet();
return tagSet;
}
public BucketTagInfo.TagSet addTag(BucketTagInfo.TagSet tagSet , String tag , String value){
tagSet.addTag(tag, value);
return tagSet;
}
public String setBucketTag(BucketTagInfo.TagSet tagSet,String bucketName){
try {
BucketTagInfo bucketTagInfo = new BucketTagInfo();
bucketTagInfo.setTagSet(tagSet);
obsClient.setBucketTagging(bucketName, bucketTagInfo);
}catch (ObsException e){
return "failed";
}
return "success";
}
public String setTag(String bucketName,List<String> tagsKey,List<String> tagsValue){
BucketTagInfo.TagSet tag = newTagSet();
for (int i = 0;i < tagsKey.size();i++){
tag.addTag(tagsKey.get(i), tagsValue.get(i));
}
String result = setBucketTag(tag,bucketName);
return result;
}
每次设置标签,都使用一个完整的map,其中有一个或多个key、value键值对
一次可以设置多个标签,但设置完成后不能再添加标签,只能重新设置
获取桶标签
public Map<String,String> getBucketTagging(String bucketName){
Map<String,String> map = new HashMap<>();
try {
BucketTagInfo bucketTagInfo = obsClient.getBucketTagging(bucketName);
if (bucketTagInfo != null){
for(BucketTagInfo.TagSet.Tag tag : bucketTagInfo.getTagSet().getTags()){
System.out.println("\t" + tag.getKey() + ":" + tag.getValue());
// map.put("tagValue",tag.getValue());
// map.put("tagKey",tag.getKey());
map.put(tag.getKey(),tag.getKey());
}
}
}catch (ObsException e){
return null;
}
return map;
}
通过桶标签列举桶
public List<ObsBucket> listBucketByTag(String tagKey, String tagValue){
ListBucketsRequest request = new ListBucketsRequest();
request.setQueryLocation(true);
List<ObsBucket> buckets = obsClient.listBuckets(request);
List<ObsBucket> result = new ArrayList<>();
for (ObsBucket bucket : buckets){
Map<String,String> map = getBucketTagging(bucket.getBucketName());
if (map != null){
String value = map.get("tagValue");
String key = map.get("tagKey");
if (value.equals(tagValue)&&key.equals(tagKey)){
result.add(bucket);
}
}
}
return result;
}
根据给出的标签,返回所有带有此标签的桶名称
删除标签
public String deleteBucketTagging(String bucketName){
try {
obsClient.deleteBucketTagging(bucketName);
}catch (ObsException e){
return "failed";
}
return "success";
}
桶日志管理
开启桶日志
/* 开启桶日志 */
public String setBuckectLogging(String targetBucketName,String targetPrefix,String bucketName){
BucketLoggingConfiguration config = new BucketLoggingConfiguration();
// config.setAgency(agency);
config.setTargetBucketName(targetBucketName);
config.setLogfilePrefix(targetPrefix);
HuaweiController hwc = new HuaweiController();
hwc.setBucketAclForLog(targetBucketName);
// hwc.closeObsClient();
// 为所有用户设置对日志对象的读权限
GrantAndPermission grant1 = new GrantAndPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_FULL_CONTROL);
config.setTargetGrants(new GrantAndPermission[]{grant1});
try{
obsClient.setBucketLogging(bucketName, config);
}catch (ObsException e){
return "ObsException";
}
return "success";
}
由于桶日志需要额外的桶日志投递用户组获取日志存放桶的权限,所以需要对桶给与额外的权限
/* 为所有用户设置对日志对象权限 */
public String setGrantAndPermission(BucketLoggingConfiguration config,String bucketName,int permission){
try{
GrantAndPermission grant1 = new GrantAndPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_READ);
switch (permission){
case 1:{
grant1 = new GrantAndPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_READ_ACP);
break;
}
case 2:{
grant1 = new GrantAndPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_WRITE);
break;
}
case 3:{
grant1 = new GrantAndPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_WRITE_ACP);
break;
}
case 4:{
grant1 = new GrantAndPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_FULL_CONTROL);
break;
}
}
config.setTargetGrants(new GrantAndPermission[]{grant1});
obsClient.setBucketLogging(bucketName, config);
}catch (ObsException e){
return "obsException";
}
return "success";
}
查看桶日志配置
/* 查看桶日志配置 */
public Map<String,String> getBucketLogging(String bucketName){
BucketLoggingConfiguration config = obsClient.getBucketLogging(bucketName);
Map<String,String> map = new HashMap<>();
// map.put("targetBucketName",config.getTargetBucketName());
// map.put("targetPrefix",config.getLogfilePrefix());
map.put(config.getTargetBucketName(), config.getLogfilePrefix());
System.out.println("\t" + config.getTargetBucketName());
System.out.println("\t" + config.getLogfilePrefix());
return map;
}
关闭桶日志并删除日志文件
/* 关闭桶日志 */
public String shutdownBucketLogging(String bucketName){
// 对桶设置空的日志配置
try{
Map<String,String> map = getBucketLogging(bucketName);
String targetBucketName = map.get("targetBucketName");
String targetPrefix = map.get("targetPrefix");
System.out.println(targetBucketName);
System.out.println(targetPrefix);
HuaweiObjectController hoc = new HuaweiObjectController();
ListObjectsRequest request = hoc.newListRequest(targetBucketName);
List<ObsObject> list = hoc.simpleList(request,targetPrefix);
for (ObsObject o : list){
hoc.deleteObject(targetBucketName,o.getObjectKey());
}
obsClient.setBucketLogging(bucketName, new BucketLoggingConfiguration());
}catch (ObsException e ){
return "ObsException";
}
return "success";
}