Skip to content

Commit 760c7c2

Browse files
authored
Merge pull request #194 from tencentyun/dev/update_demo
update sse Demo
2 parents 7b422b7 + ffafae1 commit 760c7c2

File tree

4 files changed

+218
-102
lines changed

4 files changed

+218
-102
lines changed

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

Lines changed: 26 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.qcloud.cos.auth.COSCredentials;
77
import com.qcloud.cos.exception.CosClientException;
88
import com.qcloud.cos.exception.CosServiceException;
9-
import com.qcloud.cos.http.HttpProtocol;
109
import com.qcloud.cos.internal.SkipMd5CheckStrategy;
1110
import com.qcloud.cos.model.CompleteMultipartUploadRequest;
1211
import com.qcloud.cos.model.CompleteMultipartUploadResult;
@@ -28,70 +27,60 @@
2827
import java.util.List;
2928

3029
public class KmsUploadDemo {
30+
private static COSClient cosClient = createCOSClient();
31+
32+
private static String bucketName = "mybucket-12500000000";
33+
34+
private static String key = "aaa/bbb.txt";
35+
36+
private static String kmsKeyId = "your-kms-key-id";
37+
38+
private static String encryptionContext = Base64.encodeAsString("{\"Ssekmstest\":\"Ssekmstest\"}".getBytes());
3139

3240
public static void main(String[] args) {
3341
simpleUploadWithKmsMeta();
3442
copyObjectWithKmsMeta();
3543
}
3644

37-
private static void simpleUploadWithKmsMeta() {
38-
COSCredentials cred = new BasicCOSCredentials("SECRET_ID", "SECRET_KEY");
39-
// 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
45+
private static COSClient createCOSClient() {
46+
// 初始化用户身份信息(secretId, secretKey)
47+
COSCredentials cred = new BasicCOSCredentials("COS_SECRETID", "COS_SECRETKEY");
48+
// 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
4049
ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou"));
41-
// 设置使用https请求
42-
clientConfig.setHttpProtocol(HttpProtocol.https);
43-
// 3 生成cos客户端
50+
// 生成cos客户端
4451
COSClient cosclient = new COSClient(cred, clientConfig);
45-
// bucket名需包含appid
46-
String bucketName = "mybucket-12500000000";
4752

48-
String key = "aaa/bbb.txt";
53+
return cosclient;
54+
}
55+
56+
private static void simpleUploadWithKmsMeta() {
4957
File localFile = new File("/test.log");
5058
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
51-
String kmsKeyId = "your-kms-key-id";
52-
String encryptionContext = Base64.encodeAsString("{\"Ssekmstest\":\"Ssekmstest\"}".getBytes());
5359
SSECOSKeyManagementParams ssecosKeyManagementParams = new SSECOSKeyManagementParams(kmsKeyId, encryptionContext);
5460
putObjectRequest.setSSECOSKeyManagementParams(ssecosKeyManagementParams);
5561
// 服务端加密场景下,返回的etag不再代表文件的md5,所以需要去掉客户端的md5校验
5662
// 如有需要,可获取crc64,自行校验
5763
System.setProperty(SkipMd5CheckStrategy.DISABLE_PUT_OBJECT_MD5_VALIDATION_PROPERTY, "true");
5864
try {
59-
PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);
60-
// putobjectResult会返回文件的etag
61-
String etag = putObjectResult.getETag();
65+
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
6266
String crc64 = putObjectResult.getCrc64Ecma();
67+
System.out.println("finish upload, crc64:" + crc64);
6368
} catch (CosServiceException e) {
6469
e.printStackTrace();
6570
} catch (CosClientException e) {
6671
e.printStackTrace();
6772
}
68-
69-
// 关闭客户端
70-
cosclient.shutdown();
7173
}
7274

7375
private static void multipartUploadWithKmsMeta() {
74-
COSCredentials cred = new BasicCOSCredentials("SECRET_ID", "SECRET_KEY");
75-
// 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
76-
ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou"));
77-
// 设置使用https请求
78-
clientConfig.setHttpProtocol(HttpProtocol.https);
79-
// 3 生成cos客户端
80-
COSClient cosclient = new COSClient(cred, clientConfig);
81-
// bucket名需包含appid
82-
String bucketName = "mybucket-12500000000";
83-
84-
String key = "aaa/bbb.txt";
85-
String kmsKeyId = "your-kms-key-id";
86-
String encryptionContext = Base64.encodeAsString("{\"Ssekmstest\":\"Ssekmstest\"}".getBytes());
8776
InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(bucketName, key);
8877
SSECOSKeyManagementParams ssecosKeyManagementParams = new SSECOSKeyManagementParams(kmsKeyId, encryptionContext);
8978
// 服务端加密场景下,返回的etag不再代表文件的md5,所以需要去掉客户端的md5校验
9079
// 如有需要,可获取crc64,自行校验
9180
System.setProperty(SkipMd5CheckStrategy.DISABLE_PUT_OBJECT_MD5_VALIDATION_PROPERTY, "true");
9281
initiateMultipartUploadRequest.setSSECOSKeyManagementParams(ssecosKeyManagementParams);
9382
try {
94-
InitiateMultipartUploadResult initiateMultipartUploadResult = cosclient.initiateMultipartUpload(initiateMultipartUploadRequest);
83+
InitiateMultipartUploadResult initiateMultipartUploadResult = cosClient.initiateMultipartUpload(initiateMultipartUploadRequest);
9584
List<PartETag> partETags = new LinkedList<>();
9685
for (int i = 0; i < 2; i++) {
9786
byte data[] = new byte[1024 * 1024];
@@ -105,37 +94,23 @@ private static void multipartUploadWithKmsMeta() {
10594
uploadPartRequest.setPartSize(data.length); // 设置数据长度
10695
uploadPartRequest.setPartNumber(i + 1); // 假设要上传的part编号是10
10796

108-
UploadPartResult uploadPartResult = cosclient.uploadPart(uploadPartRequest);
97+
UploadPartResult uploadPartResult = cosClient.uploadPart(uploadPartRequest);
10998
PartETag partETag = uploadPartResult.getPartETag();
11099
partETags.add(partETag);
111100
}
112101
CompleteMultipartUploadRequest completeMultipartUploadRequest =
113102
new CompleteMultipartUploadRequest(bucketName, key, initiateMultipartUploadResult.getUploadId(), partETags);
114103
CompleteMultipartUploadResult completeResult =
115-
cosclient.completeMultipartUpload(completeMultipartUploadRequest);
104+
cosClient.completeMultipartUpload(completeMultipartUploadRequest);
105+
System.out.println("finsh multipart upload, reqId:" + completeResult.getRequestId());
116106
} catch (CosServiceException e) {
117107
e.printStackTrace();
118108
} catch (CosClientException e) {
119109
e.printStackTrace();
120110
}
121-
122-
// 关闭客户端
123-
cosclient.shutdown();
124111
}
125112

126113
private static void copyObjectWithKmsMeta() {
127-
COSCredentials cred = new BasicCOSCredentials("SECRET_ID", "SECRET_KEY");
128-
// 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
129-
ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou"));
130-
// 设置使用https请求
131-
clientConfig.setHttpProtocol(HttpProtocol.https);
132-
// 3 生成cos客户端
133-
COSClient cosclient = new COSClient(cred, clientConfig);
134-
// bucket名需包含appid
135-
136-
String kmsKeyId = "your-kms-key-id";
137-
String encryptionContext = Base64.encodeAsString("{\"Ssekmstest\":\"Ssekmstest\"}".getBytes());
138-
139114
// 要拷贝的bucket region, 支持跨园区拷贝
140115
Region srcBucketRegion = new Region("ap-guangzhou");
141116
// 源bucket, bucket名需包含appid
@@ -151,15 +126,13 @@ private static void copyObjectWithKmsMeta() {
151126
srcKey, destBucketName, destKey);
152127
copyObjectRequest.setSSECOSKeyManagementParams(new SSECOSKeyManagementParams(kmsKeyId, encryptionContext));
153128
try {
154-
CopyObjectResult copyObjectResult = cosclient.copyObject(copyObjectRequest);
129+
CopyObjectResult copyObjectResult = cosClient.copyObject(copyObjectRequest);
155130
String crc64 = copyObjectResult.getCrc64Ecma();
131+
System.out.println("finish copy object, crc64:" + crc64);
156132
} catch (CosServiceException e) {
157133
e.printStackTrace();
158134
} catch (CosClientException e) {
159135
e.printStackTrace();
160136
}
161-
162-
// 关闭客户端
163-
cosclient.shutdown();
164137
}
165138
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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.CopyObjectRequest;
10+
import com.qcloud.cos.model.CopyObjectResult;
11+
import com.qcloud.cos.model.ObjectMetadata;
12+
import com.qcloud.cos.region.Region;
13+
14+
public class ModifyObjectMetadataDemo {
15+
public static void main(String[] args) {
16+
// 1 初始化用户身份信息(secretId, secretKey)
17+
COSCredentials cred = new BasicCOSCredentials("AKIDXXXXXXXX", "1A2Z3YYYYYYYYYY");
18+
// 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
19+
Region region = new Region("ap-beijing");
20+
ClientConfig clientConfig = new ClientConfig(region);
21+
// 3 生成cos客户端
22+
COSClient cosclient = new COSClient(cred, clientConfig);
23+
24+
// 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
25+
String bucketName = "examplebucket-1250000000";
26+
String key = "exampleobject";
27+
28+
ObjectMetadata objectMetadata = cosclient.getObjectMetadata(bucketName, key);
29+
objectMetadata.setHeader("x-cos-metadata-directive", "Replaced");
30+
31+
// 设置新的对象元数据
32+
// 注意:Content-Disposition 、自定义元数据或者其他有中文的头域值,在设置前请先调用 UrlEncoderUtils.encode(String) 编码,避免签名问题
33+
objectMetadata.setHeader("x-cos-storage-class", "STANDARD_IA");
34+
objectMetadata.setContentType("text/plain");
35+
36+
CopyObjectRequest copyObjectRequest = new CopyObjectRequest(region, bucketName, key, bucketName, key);
37+
copyObjectRequest.setNewObjectMetadata(objectMetadata);
38+
39+
try {
40+
CopyObjectResult copyObjectResult = cosclient.copyObject(copyObjectRequest);
41+
System.out.print(copyObjectResult.getRequestId());
42+
} catch (CosServiceException e) {
43+
e.printStackTrace();
44+
} catch (CosClientException e) {
45+
e.printStackTrace();
46+
} finally {
47+
// 确认本进程不再使用 cosClient 实例之后,关闭即可
48+
cosclient.shutdown();
49+
}
50+
}
51+
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
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.COSObject;
10+
import com.qcloud.cos.model.COSObjectInputStream;
11+
import com.qcloud.cos.model.GetObjectMetadataRequest;
12+
import com.qcloud.cos.model.GetObjectRequest;
13+
import com.qcloud.cos.model.ObjectMetadata;
14+
import com.qcloud.cos.model.PutObjectRequest;
15+
import com.qcloud.cos.model.PutObjectResult;
16+
import com.qcloud.cos.model.SSEAlgorithm;
17+
import com.qcloud.cos.region.Region;
18+
19+
import java.io.BufferedReader;
20+
import java.io.File;
21+
import java.io.IOException;
22+
import java.io.InputStreamReader;
23+
24+
public class SSECOSDemo {
25+
private static COSClient cosClient = createCOSClient();
26+
27+
private static String bucketName = "examplebucket-1250000000";
28+
29+
private static String key = "aaa/bbb.txt";
30+
31+
public static void main(String[] args) {
32+
try {
33+
SSECOSUpload();
34+
SSECOSDownload();
35+
SSECOSHead();
36+
} catch (Exception e) {
37+
e.printStackTrace();
38+
} finally {
39+
cosClient.shutdown();
40+
}
41+
}
42+
43+
private static COSClient createCOSClient() {
44+
// 初始化用户身份信息(secretId, secretKey)
45+
COSCredentials cred = new BasicCOSCredentials("COS_SECRETID", "COS_SECRETKEY");
46+
// 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
47+
ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou"));
48+
// 生成cos客户端
49+
COSClient cosclient = new COSClient(cred, clientConfig);
50+
51+
return cosclient;
52+
}
53+
54+
private static void SSECOSUpload() {
55+
File localFile = new File("test.txt");
56+
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
57+
ObjectMetadata objectMetadata = new ObjectMetadata();
58+
// 设置加密算法为AES256
59+
objectMetadata.setServerSideEncryption(SSEAlgorithm.AES256.getAlgorithm());
60+
putObjectRequest.setMetadata(objectMetadata);
61+
62+
try {
63+
PutObjectResult result = cosClient.putObject(putObjectRequest);
64+
System.out.println("finish upload, reqid:" + result.getRequestId());
65+
} catch (CosServiceException cse) {
66+
cse.printStackTrace();
67+
} catch (CosClientException cce) {
68+
cce.printStackTrace();
69+
}
70+
}
71+
72+
private static void SSECOSDownload() throws IOException {
73+
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
74+
COSObject cosObject = null;
75+
try {
76+
cosObject = cosClient.getObject(getObjectRequest);
77+
COSObjectInputStream cosObjectInputStream = cosObject.getObjectContent();
78+
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(cosObjectInputStream));
79+
System.out.println(bufferedReader.readLine());
80+
} catch (CosServiceException e) {
81+
e.printStackTrace();
82+
} catch (CosClientException e) {
83+
e.printStackTrace();
84+
} catch (IOException e) {
85+
e.printStackTrace();
86+
} finally {
87+
if (cosObject != null) {
88+
cosObject.close();
89+
}
90+
}
91+
}
92+
93+
private static void SSECOSHead() {
94+
try {
95+
GetObjectMetadataRequest getObjectMetadataRequest = new GetObjectMetadataRequest(bucketName, key);
96+
ObjectMetadata objectMetadata = cosClient.getObjectMetadata(getObjectMetadataRequest);
97+
System.out.println(objectMetadata);
98+
} catch (CosServiceException e) {
99+
e.printStackTrace();
100+
} catch (CosClientException e) {
101+
e.printStackTrace();
102+
}
103+
}
104+
}

0 commit comments

Comments
 (0)