Skip to content

Commit 0812f94

Browse files
author
jeffreykzli
committed
get bucket metadata
1 parent ce24ff3 commit 0812f94

15 files changed

+752
-53
lines changed

src/main/java/com/qcloud/cos/COSClient.java

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import com.qcloud.cos.internal.XmlResponsesSaxParser.CompleteMultipartUploadHandler;
6868
import com.qcloud.cos.internal.XmlResponsesSaxParser.CopyObjectResultHandler;
6969
import com.qcloud.cos.model.*;
70+
import com.qcloud.cos.model.IntelligentTiering.BucketIntelligentTieringConfiguration;
7071
import com.qcloud.cos.model.bucketcertificate.BucketDomainCertificateRequest;
7172
import com.qcloud.cos.model.bucketcertificate.BucketGetDomainCertificate;
7273
import com.qcloud.cos.model.bucketcertificate.BucketPutDomainCertificate;
@@ -3874,6 +3875,24 @@ public void setBucketIntelligentTieringConfiguration(SetBucketIntelligentTierCon
38743875
invoke(request, voidCosResponseHandler);
38753876
}
38763877

3878+
public List<BucketIntelligentTieringConfiguration> listBucketIntelligentTieringConfiguration(String bucketName) throws CosServiceException, CosClientException {
3879+
rejectEmpty(bucketName,
3880+
"The bucket name parameter must be specified when listing bucket IntelligentTieringConfiguration");
3881+
CosHttpRequest<CosServiceRequest> request = createRequest(bucketName, null, new CosServiceRequest(), HttpMethodName.GET);
3882+
request.addParameter("intelligent-tiering", null);
3883+
3884+
try {
3885+
return invoke(request, new Unmarshallers.ListBucketTieringConfigurationUnmarshaller());
3886+
} catch (CosServiceException cse) {
3887+
switch (cse.getStatusCode()) {
3888+
case 404:
3889+
return null;
3890+
default:
3891+
throw cse;
3892+
}
3893+
}
3894+
}
3895+
38773896
@Override
38783897
public MediaJobResponse createMediaJobs(MediaJobsRequest req) {
38793898
this.rejectStartWith(req.getCallBack(),"http","The CallBack parameter mush start with http or https");
@@ -5353,5 +5372,108 @@ private String buildPrivateM3U8Url(CosHttpRequest<PrivateM3U8Request> request)
53535372
URL url = generatePresignedUrl(request.getBucketName(), request.getResourcePath(), expiredTime, HttpMethodName.GET, new HashMap<String, String>(), params, false, false);
53545373
return url.toString();
53555374
}
5375+
5376+
public void putBucketEncryptionConfiguration(String bucketName, BucketEncryptionConfiguration bucketEncryptionConfiguration)
5377+
throws CosClientException, CosServiceException {
5378+
rejectEmpty(bucketName,
5379+
"The bucket name parameter must be specified when putting bucket encryption");
5380+
5381+
CosHttpRequest<CosServiceRequest> request = createRequest(bucketName, null, new CosServiceRequest(), HttpMethodName.PUT);
5382+
request.addParameter("encryption", null);
5383+
5384+
rejectEmpty(bucketEncryptionConfiguration.getSseAlgorithm(),
5385+
"The SseAlgorithm parameter must be specified when putting bucket encryption");
5386+
5387+
byte[] bytes = new BucketConfigurationXmlFactory().convertToXmlByteArray(bucketEncryptionConfiguration);
5388+
request.setContent(new ByteArrayInputStream(bytes));
5389+
request.addHeader(Headers.CONTENT_LENGTH, String.valueOf(bytes.length));
5390+
5391+
invoke(request, voidCosResponseHandler);
5392+
}
5393+
5394+
public BucketEncryptionConfiguration getBucketEncryptionConfiguration(String bucketName) throws CosClientException, CosServiceException {
5395+
rejectEmpty(bucketName,
5396+
"The bucket name parameter must be specified when getting bucket encryption");
5397+
5398+
CosHttpRequest<CosServiceRequest> request = createRequest(bucketName, null, new CosServiceRequest(), HttpMethodName.GET);
5399+
request.addParameter("encryption", null);
5400+
5401+
return invoke(request, new Unmarshallers.BucketEncryptionConfigurationUnmarshaller());
5402+
}
5403+
5404+
public void deleteBucketEncryptionConfiguration(String bucketName) throws CosClientException, CosServiceException {
5405+
rejectEmpty(bucketName,
5406+
"The bucket name parameter must be specified when deleting bucket encryption");
5407+
5408+
CosHttpRequest<CosServiceRequest> request = createRequest(bucketName, null, new CosServiceRequest(), HttpMethodName.DELETE);
5409+
request.addParameter("encryption", null);
5410+
5411+
invoke(request, voidCosResponseHandler);
5412+
}
5413+
5414+
public BucketObjectLockConfiguration getBucketObjectLockConfiguration(String bucketName) throws CosClientException, CosServiceException {
5415+
rejectEmpty(bucketName,
5416+
"The bucket name parameter must be specified when getting bucket object lock configuration");
5417+
5418+
CosHttpRequest<CosServiceRequest> request = createRequest(bucketName, null, new CosServiceRequest(), HttpMethodName.GET);
5419+
request.addParameter("object-lock", null);
5420+
5421+
try {
5422+
return invoke(request, new Unmarshallers.BucketObjectLockConfigurationUnmarshaller());
5423+
} catch (CosServiceException cse) {
5424+
switch (cse.getStatusCode()) {
5425+
case 404:
5426+
return null;
5427+
default:
5428+
throw cse;
5429+
}
5430+
}
5431+
}
5432+
5433+
public BucketGetMetadataResult getBucketMetadata(String bucketName) throws CosClientException, CosServiceException {
5434+
rejectEmpty(bucketName,
5435+
"The bucket name parameter must be specified when getting bucket metadata");
5436+
BucketGetMetadataResult result = new BucketGetMetadataResult();
5437+
HeadBucketResult headBucketResult = headBucket(new HeadBucketRequest(bucketName));
5438+
result.bucketName = bucketName;
5439+
StringBuilder strBuilder = new StringBuilder();
5440+
strBuilder.append(clientConfig.getHttpProtocol().toString()).append("://");
5441+
strBuilder.append(clientConfig.getEndpointBuilder()
5442+
.buildGeneralApiEndpoint(formatBucket(bucketName, null)));
5443+
result.bucketUrl = strBuilder.toString();
5444+
result.isMaz = headBucketResult.isMazBucket();
5445+
result.isOFS = headBucketResult.isMergeBucket();
5446+
result.location = headBucketResult.getBucketRegion();
5447+
5448+
try {
5449+
BucketEncryptionConfiguration encryptionConfiguration = getBucketEncryptionConfiguration(bucketName);
5450+
result.encryptionConfiguration = encryptionConfiguration;
5451+
} catch (CosServiceException cse) {
5452+
if (cse.getStatusCode() != 404) {
5453+
throw cse;
5454+
}
5455+
}
5456+
5457+
result.accessControlList = getBucketAcl(bucketName);
5458+
result.websiteConfiguration = getBucketWebsiteConfiguration(bucketName);
5459+
result.loggingConfiguration = getBucketLoggingConfiguration(bucketName);
5460+
result.crossOriginConfiguration = getBucketCrossOriginConfiguration(bucketName);
5461+
result.versioningConfiguration = getBucketVersioningConfiguration(bucketName);
5462+
result.lifecycleConfiguration = getBucketLifecycleConfiguration(bucketName);
5463+
5464+
try {
5465+
result.replicationConfiguration = getBucketReplicationConfiguration(bucketName);
5466+
} catch (CosServiceException cse) {
5467+
if (cse.getStatusCode() != 404) {
5468+
throw cse;
5469+
}
5470+
}
5471+
5472+
result.taggingConfiguration = getBucketTaggingConfiguration(bucketName);
5473+
result.tieringConfigurations = listBucketIntelligentTieringConfiguration(bucketName);
5474+
result.bucketObjectLockConfiguration = getBucketObjectLockConfiguration(bucketName);
5475+
5476+
return result;
5477+
}
53565478
}
53575479

src/main/java/com/qcloud/cos/Headers.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ public interface Headers {
109109
*/
110110
public static final String BUCKET_ARCH = "x-cos-bucket-arch";
111111

112+
public static final String BUCKET_AZ_TYPE = "x-cos-bucket-az-type";
113+
112114
/**
113115
* COS request header indicating how to handle metadata when copying an object
114116
*/
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package com.qcloud.cos.demo;
2+
3+
import com.qcloud.cos.COSClient;
4+
import com.qcloud.cos.ClientConfig;
5+
import com.qcloud.cos.auth.BasicCOSCredentials;
6+
import com.qcloud.cos.auth.COSCredentials;
7+
import com.qcloud.cos.exception.CosClientException;
8+
import com.qcloud.cos.exception.CosServiceException;
9+
import com.qcloud.cos.model.BucketEncryptionConfiguration;
10+
import com.qcloud.cos.region.Region;
11+
12+
public class BucketEncryptionDemo {
13+
private static String secretId = System.getenv("SECRETID");
14+
private static String secretKey = System.getenv("SECRETKEY");
15+
private static String bucketName = System.getenv("BUCKET_NAME");
16+
private static String region = System.getenv("REGION");
17+
private static COSClient cosClient = createCli();
18+
19+
public static void main(String[] args) {
20+
try {
21+
putBucketEncryption();
22+
getBucketEncryption();
23+
deleteBucketEncrytion();
24+
} catch (Exception e) {
25+
e.printStackTrace();
26+
} finally {
27+
cosClient.shutdown();
28+
}
29+
}
30+
31+
private static COSClient createCli() {
32+
// 初始化用户身份信息(secretId, secretKey)
33+
COSCredentials cred = new BasicCOSCredentials(secretId,secretKey);
34+
// 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
35+
ClientConfig clientConfig = new ClientConfig(new Region(region));
36+
// 生成cos客户端
37+
return new COSClient(cred, clientConfig);
38+
}
39+
40+
private static void putBucketEncryption() {
41+
BucketEncryptionConfiguration configuration = new BucketEncryptionConfiguration();
42+
configuration.setSseAlgorithm("AES256");
43+
try {
44+
cosClient.putBucketEncryptionConfiguration(bucketName, configuration);
45+
System.out.println("finish put bucket Encryption");
46+
} catch (CosServiceException cse) {
47+
cse.printStackTrace();
48+
} catch (CosClientException cce) {
49+
cce.printStackTrace();
50+
}
51+
}
52+
53+
private static void getBucketEncryption() {
54+
try {
55+
BucketEncryptionConfiguration configuration = cosClient.getBucketEncryptionConfiguration(bucketName);
56+
System.out.println(configuration.getSseAlgorithm());
57+
} catch (CosServiceException cse) {
58+
cse.printStackTrace();
59+
} catch (CosClientException cce) {
60+
cce.printStackTrace();
61+
}
62+
}
63+
64+
private static void deleteBucketEncrytion() {
65+
try {
66+
cosClient.deleteBucketEncryptionConfiguration(bucketName);
67+
System.out.println("finish delete bucket encrytion");
68+
} catch (CosServiceException cse) {
69+
cse.printStackTrace();
70+
} catch (CosClientException cce) {
71+
cce.printStackTrace();
72+
}
73+
}
74+
}

src/main/java/com/qcloud/cos/demo/BucketIntelligentTierDemo.java

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,75 @@
55
import com.qcloud.cos.ClientConfig;
66
import com.qcloud.cos.auth.BasicCOSCredentials;
77
import com.qcloud.cos.auth.COSCredentials;
8+
import com.qcloud.cos.exception.CosClientException;
9+
import com.qcloud.cos.exception.CosServiceException;
10+
import com.qcloud.cos.http.HttpProtocol;
811
import com.qcloud.cos.model.BucketIntelligentTierConfiguration;
12+
import com.qcloud.cos.model.IntelligentTiering.BucketIntelligentTieringConfiguration;
913
import com.qcloud.cos.model.SetBucketIntelligentTierConfigurationRequest;
1014
import com.qcloud.cos.region.Region;
1115

16+
import java.util.List;
17+
1218
public class BucketIntelligentTierDemo {
19+
private static String secretId = System.getenv("SECRETID");
20+
private static String secretKey = System.getenv("SECRETKEY");
21+
private static String bucketName = System.getenv("BUCKET_NAME");
22+
private static String region = System.getenv("REGION");
23+
24+
private static COSClient cosClient = createCli();
25+
1326
public static void main(String[] args) {
14-
// 1 初始化用户身份信息(secretId, secretKey)
15-
COSCredentials cred = new BasicCOSCredentials("SECRET_ID", "SECRET_KEY");
16-
// 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
17-
ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou"));
18-
// 3 生成cos客户端
19-
COSClient cosclient = new COSClient(cred, clientConfig);
20-
// bucket名需包含appid
21-
String bucketName = "mybucket-12500000000";
27+
try {
28+
setBucketIntelligentTieringConfiguration();
29+
getBucketIntelligentTieringConfiguration();
30+
} catch (Exception e) {
31+
e.printStackTrace();
32+
} finally {
33+
cosClient.shutdown();
34+
}
35+
}
36+
37+
private static COSClient createCli() {
38+
// 初始化用户身份信息(secretId, secretKey)
39+
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
40+
// 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
41+
ClientConfig clientConfig = new ClientConfig(new Region(region));
42+
clientConfig.setHttpProtocol(HttpProtocol.http);
43+
// 生成cos客户端
44+
return new COSClient(cred, clientConfig);
45+
}
2246

47+
private static void setBucketIntelligentTieringConfiguration() {
2348
BucketIntelligentTierConfiguration bucketIntelligentTierConfiguration = new BucketIntelligentTierConfiguration();
2449
bucketIntelligentTierConfiguration.setStatus(BucketIntelligentTierConfiguration.ENABLED);
2550
bucketIntelligentTierConfiguration.setTransition(new BucketIntelligentTierConfiguration.Transition(30));
2651
SetBucketIntelligentTierConfigurationRequest setBucketIntelligentTierConfigurationRequest = new SetBucketIntelligentTierConfigurationRequest();
2752
setBucketIntelligentTierConfigurationRequest.setBucketName(bucketName);
2853
setBucketIntelligentTierConfigurationRequest.setIntelligentTierConfiguration(bucketIntelligentTierConfiguration);
29-
cosclient.setBucketIntelligentTieringConfiguration(setBucketIntelligentTierConfigurationRequest);
30-
BucketIntelligentTierConfiguration bucketIntelligentTierConfiguration1 = cosclient.getBucketIntelligentTierConfiguration(bucketName);
54+
cosClient.setBucketIntelligentTieringConfiguration(setBucketIntelligentTierConfigurationRequest);
55+
System.out.println("finish setting bucket intelligent tiering configuration");
56+
}
57+
58+
private static void getBucketIntelligentTieringConfiguration() {
59+
BucketIntelligentTierConfiguration bucketIntelligentTierConfiguration1 = cosClient.getBucketIntelligentTierConfiguration(bucketName);
60+
System.out.println("finish getting bucket intelligent tiering configuration");
3161
System.out.println(bucketIntelligentTierConfiguration1.getStatus());
3262
System.out.println(bucketIntelligentTierConfiguration1.getTransition().getDays());
3363
}
64+
65+
private static void listBucketIntelligentTieringConfiguration() {
66+
try {
67+
List<BucketIntelligentTieringConfiguration> configurations = cosClient.listBucketIntelligentTieringConfiguration(bucketName);
68+
if (configurations == null) {
69+
System.out.println("The Intelligenttiering configuration was not found about the specified bucket.");
70+
} else {
71+
System.out.println("finish list bucket intelligent tiering configuration");
72+
}
73+
} catch (CosServiceException cse) {
74+
cse.printStackTrace();
75+
} catch (CosClientException cce) {
76+
cce.printStackTrace();
77+
}
78+
}
3479
}

src/main/java/com/qcloud/cos/internal/Unmarshallers.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.qcloud.cos.internal.XmlResponsesSaxParser.CopyObjectResultHandler;
2929
import com.qcloud.cos.internal.cihandler.*;
3030
import com.qcloud.cos.model.*;
31+
import com.qcloud.cos.model.IntelligentTiering.BucketIntelligentTieringConfiguration;
3132
import com.qcloud.cos.model.bucketcertificate.BucketGetDomainCertificate;
3233
import com.qcloud.cos.model.ciModel.auditing.AudioAuditingResponse;
3334
import com.qcloud.cos.model.ciModel.auditing.AuditingKeywordResponse;
@@ -441,6 +442,14 @@ public BucketIntelligentTierConfiguration unmarshall(InputStream in) throws Exce
441442
}
442443
}
443444

445+
public static final class ListBucketTieringConfigurationUnmarshaller
446+
implements Unmarshaller<List<BucketIntelligentTieringConfiguration>, InputStream> {
447+
448+
public List<BucketIntelligentTieringConfiguration> unmarshall(InputStream in) throws Exception {
449+
return new XmlResponsesSaxParser().parseListBucketIntelligentTierConfigurationsResponse(in).getConfigurations();
450+
}
451+
}
452+
444453
public static final class SetObjectTaggingResponseUnmarshaller implements Unmarshaller<SetObjectTaggingResult, InputStream> {
445454

446455
@Override
@@ -457,6 +466,28 @@ public DeleteObjectTaggingResult unmarshall(InputStream in) throws Exception {
457466
}
458467
}
459468

469+
/**
470+
* Unmarshaller for the BucketEncryption XML response.
471+
*/
472+
public static final class BucketEncryptionConfigurationUnmarshaller implements
473+
Unmarshaller<BucketEncryptionConfiguration, InputStream> {
474+
public BucketEncryptionConfiguration unmarshall(InputStream in) throws Exception {
475+
return new XmlResponsesSaxParser()
476+
.parseBucketEncryptionResponse(in).getBucketEncryptionConfiguration();
477+
}
478+
}
479+
480+
/**
481+
* Unmarshaller for the BucketObjectLock XML response.
482+
*/
483+
public static final class BucketObjectLockConfigurationUnmarshaller implements
484+
Unmarshaller<BucketObjectLockConfiguration, InputStream> {
485+
public BucketObjectLockConfiguration unmarshall(InputStream in) throws Exception {
486+
return new XmlResponsesSaxParser()
487+
.parseBucketObjectLockConfigurationResponse(in).getBucketObjectLockConfiguration();
488+
}
489+
}
490+
460491
public static final class ListQueueUnmarshaller
461492
implements Unmarshaller<MediaListQueueResponse, InputStream> {
462493

0 commit comments

Comments
 (0)