66import com .qcloud .cos .auth .COSCredentials ;
77import com .qcloud .cos .exception .CosClientException ;
88import com .qcloud .cos .exception .CosServiceException ;
9- import com .qcloud .cos .http .HttpProtocol ;
109import com .qcloud .cos .internal .SkipMd5CheckStrategy ;
1110import com .qcloud .cos .model .CompleteMultipartUploadRequest ;
1211import com .qcloud .cos .model .CompleteMultipartUploadResult ;
2827import java .util .List ;
2928
3029public 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}
0 commit comments