最近更新时间:2025-08-20 20:02:36
生命周期相关说明请参见文档:生命周期管理。
如需按最后访问时间设置生命周期规则,须先开启访问追踪功能。
public void putLifecycle() {
// 初始化 Ks3Client,参见“初始化”文档
Ks3Client ks3Client = initKs3Client();
try {
// 规则1
Rule rule1 = new Rule();
// 设置规则ID,不可重复
rule1.setId("rule-1");
// 设置要匹配的文件的前缀
rule1.setPrefix("0001/");
// 设置过期时间,最后修改时间为该时间之前的文件将会在该日期+1天后过期删除
rule1.setExpirationDate(new SimpleDateFormat("yyyy-MM-dd").parse("2023-01-01"));
// 启用该规则
rule1.setStatus(Status.ENABLED);
// 规则2
Rule rule2 = new Rule();
rule2.setId("rule-2");
rule2.setStatus(Status.ENABLED);
rule2.setPrefix("0002/");
// 设置要匹配的文件的Tag,可添加多个
rule2.setTagSet(Arrays.asList(new ObjectTag("key1", "value1"), new ObjectTag("key2", "value2")));
// 设置过期时间为文件的最后修改时间+130天
rule2.setExpirationInDays(130);
// 设置存储类型转:文件最后修改时间+10天后转为低频存储,文件最后修改时间+40天后转为归档存储
Transition transition1 = new Transition(10, StorageClass.StandardInfrequentAccess);
Transition transition2 = new Transition(40, StorageClass.Archive);
rule2.setStorageTransitions(Arrays.asList(transition1, transition2));
// 规则 3,文件和碎片的过期规则
Rule rule3 = new Rule();
rule3.setId("rule-3");
rule3.setStatus(Status.ENABLED);
// 设置要匹配的文件的前缀
rule3.setPrefix("0003/");
// 设置过期时间为文件最后修改时间 +100 天
rule3.setExpirationInDays(100);
// 设置指定日期作为过期时间
// rule3.setExpirationDate(date);
AbortMultipartUpload abortMultipartUpload = new AbortMultipartUpload();
// 碎片的过期时间为 init multi upload 的时间 +15 天
abortMultipartUpload.setExpirationDays(15);
// 设置指定日期作为碎片的过期时间
// abortMultipartUpload.setExpirationDate(date);
rule3.setAbortMultipartUpload(abortMultipartUpload);
// 规则4,按最后访问时间
Rule rule4 = new Rule();
rule4.setId("rule-4");
rule4.setStatus(Status.ENABLED);
rule4.setPrefix("0004/");
// 设置要匹配的文件的Tag,可添加多个
rule4.setTagSet(Arrays.asList(new ObjectTag("key1", "value1"), new ObjectTag("key4", "value4")));
// 设置过期时间为文件的最后修改时间+130天
rule4.setExpirationInDays(130);
// 设置存储类型转:文件最后访问时间+10天后转为低频存储,文件最后访问时间+40天后转为归档存储,当Object被访问后自动转回标准存储类型。
Transition transition3 = new Transition(10, StorageClass.StandardInfrequentAccess);
transition3.setIsAccessTime(true);
transition3.setReturnToStdWhenVisit(true);
Transition transition4 = new Transition(40, StorageClass.Archive);
transition4.setIsAccessTime(true);
transition4.setReturnToStdWhenVisit(true);
rule4.setStorageTransitions(Arrays.asList(transition3, transition4));
// 生命周期配置
BucketLifecycleConfiguration configuration = new BucketLifecycleConfiguration(Arrays.asList(rule1, rule2, rule3, rule4));
// 支持前缀重叠
configuration.setAllowSameActionOverlap(true);
// 创建Bucket生命周期
ks3Client.putBucketLifecycle("bucketName", configuration);
} catch (Ks3ServiceException e) {
System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
System.out.println("Error Message: " + e.getErrorMessage());
System.out.println("Error Code: " + e.getErrorCode());
System.out.println("Request ID: " + e.getRequestId());
} catch (Ks3ClientException e) {
System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
System.out.println("Error Message: " + e.getMessage());
} catch (ParseException e) {
throw new RuntimeException(e);
} finally {
// 不再使用时,关闭 Ks3Client
ks3Client.shutdown();
}
}以下代码用于获取存储空间生命周期规则:
public void getBucketLifecycle() {
// 初始化 Ks3Client,参见“初始化”文档
Ks3Client ks3Client = initKs3Client();
try {
BucketLifecycleConfiguration bucketLifecycle = ks3Client.getBucketLifecycle("bucketName");
System.out.println("Allow same action overlap: " + bucketLifecycle.getAllowSameActionOverlap());
System.out.println("Rules:");
for (Rule rule : bucketLifecycle.getRules()) {
System.out.println("Rule ID: " + rule.getId());
System.out.println("Rule Prefix: " + rule.getPrefix());
System.out.println("Rule Status: " + rule.getStatus());
System.out.println("Rule Expiration Date: " + rule.getExpirationDate());
System.out.println("Rule Expiration In Days: " + rule.getExpirationInDays());
System.out.println("Rule Storage Transitions: " + rule.getStorageTransitions());
System.out.println("Rule Tag Set: " + rule.getTagSet());
System.out.println("Rule Abort Multipart Upload: " + rule.getAbortMultipartUpload());
}
} catch (Ks3ServiceException e) {
System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
System.out.println("Error Message: " + e.getErrorMessage());
System.out.println("Error Code: " + e.getErrorCode());
System.out.println("Request ID: " + e.getRequestId());
} catch (Ks3ClientException e) {
System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
System.out.println("Error Message: " + e.getMessage());
} finally {
// 不再使用时,关闭 Ks3Client
ks3Client.shutdown();
}
}
以下代码用于删除存储空间生命周期规则:
public void deleteBucketLifecycle() {
// 初始化 Ks3Client,参见“初始化”文档
Ks3Client ks3Client = initKs3Client();
try {
ks3Client.deleteBucketLifecycle("bucketName");
} catch (Ks3ServiceException e) {
System.out.println("Ks3ServiceException occurred, which means the request was made to KS3, but KS3 returned an error response for some reason.");
System.out.println("Error Message: " + e.getErrorMessage());
System.out.println("Error Code: " + e.getErrorCode());
System.out.println("Request ID: " + e.getRequestId());
} catch (Ks3ClientException e) {
System.out.println("Ks3ClientException occurred, which means the client encountered an internal error while trying to communicate with KS3.");
System.out.println("Error Message: " + e.getMessage());
} finally {
// 不再使用时,关闭 Ks3Client
ks3Client.shutdown();
}
}
纯净模式
