diff --git a/src/main/java/com/qcloud/cos/demo/KmsUploadDemo.java b/src/main/java/com/qcloud/cos/demo/KmsUploadDemo.java index 69609e78..8c9b238a 100644 --- a/src/main/java/com/qcloud/cos/demo/KmsUploadDemo.java +++ b/src/main/java/com/qcloud/cos/demo/KmsUploadDemo.java @@ -6,7 +6,6 @@ import com.qcloud.cos.auth.COSCredentials; import com.qcloud.cos.exception.CosClientException; import com.qcloud.cos.exception.CosServiceException; -import com.qcloud.cos.http.HttpProtocol; import com.qcloud.cos.internal.SkipMd5CheckStrategy; import com.qcloud.cos.model.CompleteMultipartUploadRequest; import com.qcloud.cos.model.CompleteMultipartUploadResult; @@ -28,62 +27,52 @@ import java.util.List; public class KmsUploadDemo { + private static COSClient cosClient = createCOSClient(); + + private static String bucketName = "mybucket-12500000000"; + + private static String key = "aaa/bbb.txt"; + + private static String kmsKeyId = "your-kms-key-id"; + + private static String encryptionContext = Base64.encodeAsString("{\"Ssekmstest\":\"Ssekmstest\"}".getBytes()); public static void main(String[] args) { simpleUploadWithKmsMeta(); copyObjectWithKmsMeta(); } - private static void simpleUploadWithKmsMeta() { - COSCredentials cred = new BasicCOSCredentials("SECRET_ID", "SECRET_KEY"); - // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224 + private static COSClient createCOSClient() { + // 初始化用户身份信息(secretId, secretKey) + COSCredentials cred = new BasicCOSCredentials("COS_SECRETID", "COS_SECRETKEY"); + // 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224 ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou")); - // 设置使用https请求 - clientConfig.setHttpProtocol(HttpProtocol.https); - // 3 生成cos客户端 + // 生成cos客户端 COSClient cosclient = new COSClient(cred, clientConfig); - // bucket名需包含appid - String bucketName = "mybucket-12500000000"; - String key = "aaa/bbb.txt"; + return cosclient; + } + + private static void simpleUploadWithKmsMeta() { File localFile = new File("/test.log"); PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile); - String kmsKeyId = "your-kms-key-id"; - String encryptionContext = Base64.encodeAsString("{\"Ssekmstest\":\"Ssekmstest\"}".getBytes()); SSECOSKeyManagementParams ssecosKeyManagementParams = new SSECOSKeyManagementParams(kmsKeyId, encryptionContext); putObjectRequest.setSSECOSKeyManagementParams(ssecosKeyManagementParams); // 服务端加密场景下,返回的etag不再代表文件的md5,所以需要去掉客户端的md5校验 // 如有需要,可获取crc64,自行校验 System.setProperty(SkipMd5CheckStrategy.DISABLE_PUT_OBJECT_MD5_VALIDATION_PROPERTY, "true"); try { - PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest); - // putobjectResult会返回文件的etag - String etag = putObjectResult.getETag(); + PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); String crc64 = putObjectResult.getCrc64Ecma(); + System.out.println("finish upload, crc64:" + crc64); } catch (CosServiceException e) { e.printStackTrace(); } catch (CosClientException e) { e.printStackTrace(); } - - // 关闭客户端 - cosclient.shutdown(); } private static void multipartUploadWithKmsMeta() { - COSCredentials cred = new BasicCOSCredentials("SECRET_ID", "SECRET_KEY"); - // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224 - ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou")); - // 设置使用https请求 - clientConfig.setHttpProtocol(HttpProtocol.https); - // 3 生成cos客户端 - COSClient cosclient = new COSClient(cred, clientConfig); - // bucket名需包含appid - String bucketName = "mybucket-12500000000"; - - String key = "aaa/bbb.txt"; - String kmsKeyId = "your-kms-key-id"; - String encryptionContext = Base64.encodeAsString("{\"Ssekmstest\":\"Ssekmstest\"}".getBytes()); InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(bucketName, key); SSECOSKeyManagementParams ssecosKeyManagementParams = new SSECOSKeyManagementParams(kmsKeyId, encryptionContext); // 服务端加密场景下,返回的etag不再代表文件的md5,所以需要去掉客户端的md5校验 @@ -91,7 +80,7 @@ private static void multipartUploadWithKmsMeta() { System.setProperty(SkipMd5CheckStrategy.DISABLE_PUT_OBJECT_MD5_VALIDATION_PROPERTY, "true"); initiateMultipartUploadRequest.setSSECOSKeyManagementParams(ssecosKeyManagementParams); try { - InitiateMultipartUploadResult initiateMultipartUploadResult = cosclient.initiateMultipartUpload(initiateMultipartUploadRequest); + InitiateMultipartUploadResult initiateMultipartUploadResult = cosClient.initiateMultipartUpload(initiateMultipartUploadRequest); List partETags = new LinkedList<>(); for (int i = 0; i < 2; i++) { byte data[] = new byte[1024 * 1024]; @@ -105,37 +94,23 @@ private static void multipartUploadWithKmsMeta() { uploadPartRequest.setPartSize(data.length); // 设置数据长度 uploadPartRequest.setPartNumber(i + 1); // 假设要上传的part编号是10 - UploadPartResult uploadPartResult = cosclient.uploadPart(uploadPartRequest); + UploadPartResult uploadPartResult = cosClient.uploadPart(uploadPartRequest); PartETag partETag = uploadPartResult.getPartETag(); partETags.add(partETag); } CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, key, initiateMultipartUploadResult.getUploadId(), partETags); CompleteMultipartUploadResult completeResult = - cosclient.completeMultipartUpload(completeMultipartUploadRequest); + cosClient.completeMultipartUpload(completeMultipartUploadRequest); + System.out.println("finsh multipart upload, reqId:" + completeResult.getRequestId()); } catch (CosServiceException e) { e.printStackTrace(); } catch (CosClientException e) { e.printStackTrace(); } - - // 关闭客户端 - cosclient.shutdown(); } private static void copyObjectWithKmsMeta() { - COSCredentials cred = new BasicCOSCredentials("SECRET_ID", "SECRET_KEY"); - // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224 - ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou")); - // 设置使用https请求 - clientConfig.setHttpProtocol(HttpProtocol.https); - // 3 生成cos客户端 - COSClient cosclient = new COSClient(cred, clientConfig); - // bucket名需包含appid - - String kmsKeyId = "your-kms-key-id"; - String encryptionContext = Base64.encodeAsString("{\"Ssekmstest\":\"Ssekmstest\"}".getBytes()); - // 要拷贝的bucket region, 支持跨园区拷贝 Region srcBucketRegion = new Region("ap-guangzhou"); // 源bucket, bucket名需包含appid @@ -151,15 +126,13 @@ private static void copyObjectWithKmsMeta() { srcKey, destBucketName, destKey); copyObjectRequest.setSSECOSKeyManagementParams(new SSECOSKeyManagementParams(kmsKeyId, encryptionContext)); try { - CopyObjectResult copyObjectResult = cosclient.copyObject(copyObjectRequest); + CopyObjectResult copyObjectResult = cosClient.copyObject(copyObjectRequest); String crc64 = copyObjectResult.getCrc64Ecma(); + System.out.println("finish copy object, crc64:" + crc64); } catch (CosServiceException e) { e.printStackTrace(); } catch (CosClientException e) { e.printStackTrace(); } - - // 关闭客户端 - cosclient.shutdown(); } } diff --git a/src/main/java/com/qcloud/cos/demo/ModifyObjectMetadataDemo.java b/src/main/java/com/qcloud/cos/demo/ModifyObjectMetadataDemo.java new file mode 100644 index 00000000..f7be7427 --- /dev/null +++ b/src/main/java/com/qcloud/cos/demo/ModifyObjectMetadataDemo.java @@ -0,0 +1,51 @@ +package com.qcloud.cos.demo; + +import com.qcloud.cos.COSClient; +import com.qcloud.cos.ClientConfig; +import com.qcloud.cos.auth.BasicCOSCredentials; +import com.qcloud.cos.auth.COSCredentials; +import com.qcloud.cos.exception.CosClientException; +import com.qcloud.cos.exception.CosServiceException; +import com.qcloud.cos.model.CopyObjectRequest; +import com.qcloud.cos.model.CopyObjectResult; +import com.qcloud.cos.model.ObjectMetadata; +import com.qcloud.cos.region.Region; + +public class ModifyObjectMetadataDemo { + public static void main(String[] args) { + // 1 初始化用户身份信息(secretId, secretKey) + COSCredentials cred = new BasicCOSCredentials("AKIDXXXXXXXX", "1A2Z3YYYYYYYYYY"); + // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224 + Region region = new Region("ap-beijing"); + ClientConfig clientConfig = new ClientConfig(region); + // 3 生成cos客户端 + COSClient cosclient = new COSClient(cred, clientConfig); + + // 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式 + String bucketName = "examplebucket-1250000000"; + String key = "exampleobject"; + + ObjectMetadata objectMetadata = cosclient.getObjectMetadata(bucketName, key); + objectMetadata.setHeader("x-cos-metadata-directive", "Replaced"); + + // 设置新的对象元数据 + // 注意:Content-Disposition 、自定义元数据或者其他有中文的头域值,在设置前请先调用 UrlEncoderUtils.encode(String) 编码,避免签名问题 + objectMetadata.setHeader("x-cos-storage-class", "STANDARD_IA"); + objectMetadata.setContentType("text/plain"); + + CopyObjectRequest copyObjectRequest = new CopyObjectRequest(region, bucketName, key, bucketName, key); + copyObjectRequest.setNewObjectMetadata(objectMetadata); + + try { + CopyObjectResult copyObjectResult = cosclient.copyObject(copyObjectRequest); + System.out.print(copyObjectResult.getRequestId()); + } catch (CosServiceException e) { + e.printStackTrace(); + } catch (CosClientException e) { + e.printStackTrace(); + } finally { + // 确认本进程不再使用 cosClient 实例之后,关闭即可 + cosclient.shutdown(); + } + } +} diff --git a/src/main/java/com/qcloud/cos/demo/SSECOSDemo.java b/src/main/java/com/qcloud/cos/demo/SSECOSDemo.java new file mode 100644 index 00000000..491a98dd --- /dev/null +++ b/src/main/java/com/qcloud/cos/demo/SSECOSDemo.java @@ -0,0 +1,104 @@ +package com.qcloud.cos.demo; + +import com.qcloud.cos.COSClient; +import com.qcloud.cos.ClientConfig; +import com.qcloud.cos.auth.BasicCOSCredentials; +import com.qcloud.cos.auth.COSCredentials; +import com.qcloud.cos.exception.CosClientException; +import com.qcloud.cos.exception.CosServiceException; +import com.qcloud.cos.model.COSObject; +import com.qcloud.cos.model.COSObjectInputStream; +import com.qcloud.cos.model.GetObjectMetadataRequest; +import com.qcloud.cos.model.GetObjectRequest; +import com.qcloud.cos.model.ObjectMetadata; +import com.qcloud.cos.model.PutObjectRequest; +import com.qcloud.cos.model.PutObjectResult; +import com.qcloud.cos.model.SSEAlgorithm; +import com.qcloud.cos.region.Region; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; + +public class SSECOSDemo { + private static COSClient cosClient = createCOSClient(); + + private static String bucketName = "examplebucket-1250000000"; + + private static String key = "aaa/bbb.txt"; + + public static void main(String[] args) { + try { + SSECOSUpload(); + SSECOSDownload(); + SSECOSHead(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + cosClient.shutdown(); + } + } + + private static COSClient createCOSClient() { + // 初始化用户身份信息(secretId, secretKey) + COSCredentials cred = new BasicCOSCredentials("COS_SECRETID", "COS_SECRETKEY"); + // 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224 + ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou")); + // 生成cos客户端 + COSClient cosclient = new COSClient(cred, clientConfig); + + return cosclient; + } + + private static void SSECOSUpload() { + File localFile = new File("test.txt"); + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile); + ObjectMetadata objectMetadata = new ObjectMetadata(); + // 设置加密算法为AES256 + objectMetadata.setServerSideEncryption(SSEAlgorithm.AES256.getAlgorithm()); + putObjectRequest.setMetadata(objectMetadata); + + try { + PutObjectResult result = cosClient.putObject(putObjectRequest); + System.out.println("finish upload, reqid:" + result.getRequestId()); + } catch (CosServiceException cse) { + cse.printStackTrace(); + } catch (CosClientException cce) { + cce.printStackTrace(); + } + } + + private static void SSECOSDownload() throws IOException { + GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key); + COSObject cosObject = null; + try { + cosObject = cosClient.getObject(getObjectRequest); + COSObjectInputStream cosObjectInputStream = cosObject.getObjectContent(); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(cosObjectInputStream)); + System.out.println(bufferedReader.readLine()); + } catch (CosServiceException e) { + e.printStackTrace(); + } catch (CosClientException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (cosObject != null) { + cosObject.close(); + } + } + } + + private static void SSECOSHead() { + try { + GetObjectMetadataRequest getObjectMetadataRequest = new GetObjectMetadataRequest(bucketName, key); + ObjectMetadata objectMetadata = cosClient.getObjectMetadata(getObjectMetadataRequest); + System.out.println(objectMetadata); + } catch (CosServiceException e) { + e.printStackTrace(); + } catch (CosClientException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/qcloud/cos/demo/SSECustomerDemo.java b/src/main/java/com/qcloud/cos/demo/SSECustomerDemo.java index 835b556d..7d35fe91 100644 --- a/src/main/java/com/qcloud/cos/demo/SSECustomerDemo.java +++ b/src/main/java/com/qcloud/cos/demo/SSECustomerDemo.java @@ -6,7 +6,6 @@ import com.qcloud.cos.auth.COSCredentials; import com.qcloud.cos.exception.CosClientException; import com.qcloud.cos.exception.CosServiceException; -import com.qcloud.cos.http.HttpProtocol; import com.qcloud.cos.model.COSObject; import com.qcloud.cos.model.COSObjectInputStream; import com.qcloud.cos.model.GetObjectMetadataRequest; @@ -15,7 +14,6 @@ import com.qcloud.cos.model.PutObjectRequest; import com.qcloud.cos.model.PutObjectResult; import com.qcloud.cos.model.SSECustomerKey; -import com.qcloud.cos.model.StorageClass; import com.qcloud.cos.region.Region; import java.io.BufferedReader; @@ -24,60 +22,61 @@ import java.io.InputStreamReader; public class SSECustomerDemo { + private static COSClient cosClient = createCOSClient(); + + private static String bucketName = "examplebucket-1250000000"; + + private static String key = "aaa/bbb.txt"; + + private static String base64EncodedKey = "MDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUY="; + public static void main(String[] args) { - SSECustomerUpload(); - SSECustomerDownload(); - SSECustomerHead(); + try { + SSECustomerUpload(); + SSECustomerDownload(); + SSECustomerHead(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + cosClient.shutdown(); + } } - private static void SSECustomerUpload() { + + private static COSClient createCOSClient() { // 初始化用户身份信息(secretId, secretKey) COSCredentials cred = new BasicCOSCredentials("COS_SECRETID", "COS_SECRETKEY"); // 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224 ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou")); - // 要求http协议 - clientConfig.setHttpProtocol(HttpProtocol.https); // 生成cos客户端 COSClient cosclient = new COSClient(cred, clientConfig); - // bucket名需包含appid - String bucketName = "examplebucket-1250000000"; - String key = "aaa/bbb.txt"; + return cosclient; + } + + private static void SSECustomerUpload() { File localFile = new File("test.txt"); PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile); - SSECustomerKey sseCustomerKey = new SSECustomerKey("MDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUY="); + SSECustomerKey sseCustomerKey = new SSECustomerKey(base64EncodedKey); putObjectRequest.setSSECustomerKey(sseCustomerKey); - // 设置存储类型, 默认是标准(Standard), 低频(standard_ia) - putObjectRequest.setStorageClass(StorageClass.Standard_IA); + try { - PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest); + PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); // putobjectResult会返回文件的etag, 该md5值根据s3语义不是对象的md5,只是唯一性标志 String etag = putObjectResult.getETag(); + System.out.println("finish upload, etag:" + etag); } catch (CosServiceException e) { e.printStackTrace(); } catch (CosClientException e) { e.printStackTrace(); } - // 关闭客户端 - cosclient.shutdown(); - } - private static void SSECustomerDownload() { - // 1 初始化用户身份信息(secretId, secretKey) - COSCredentials cred = new BasicCOSCredentials("COS_SECRETID", "COS_SECRETKEY"); - // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224 - ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou")); - clientConfig.setHttpProtocol(HttpProtocol.https); - // 3 生成cos客户端 - COSClient cosclient = new COSClient(cred, clientConfig); - // bucket名需包含appid - String bucketName = "examplebucket-1250000000"; - - String key = "aaa/bbb.txt"; + private static void SSECustomerDownload() throws IOException { GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key); - SSECustomerKey sseCustomerKey = new SSECustomerKey("MDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUY="); + SSECustomerKey sseCustomerKey = new SSECustomerKey(base64EncodedKey); getObjectRequest.setSSECustomerKey(sseCustomerKey); + COSObject cosObject = null; try { - COSObject cosObject = cosclient.getObject(getObjectRequest); + cosObject = cosClient.getObject(getObjectRequest); COSObjectInputStream cosObjectInputStream = cosObject.getObjectContent(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(cosObjectInputStream)); System.out.println(bufferedReader.readLine()); @@ -87,36 +86,25 @@ private static void SSECustomerDownload() { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); + } finally { + if (cosObject != null) { + cosObject.close(); + } } - // 关闭客户端 - cosclient.shutdown(); } private static void SSECustomerHead() { - // 1 初始化用户身份信息(secretId, secretKey) - COSCredentials cred = new BasicCOSCredentials("COS_SECRETID", "COS_SECRETKEY"); - // 2 设置bucket的区域, COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224 - ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou")); - clientConfig.setHttpProtocol(HttpProtocol.https); - // 3 生成cos客户端 - COSClient cosclient = new COSClient(cred, clientConfig); - // bucket名需包含appid - String bucketName = "examplebucket-1250000000"; - - String key = "aaa/bbb.txt"; try { GetObjectMetadataRequest getObjectMetadataRequest = new GetObjectMetadataRequest(bucketName, key); - SSECustomerKey sseCustomerKey = new SSECustomerKey("MDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUY="); + SSECustomerKey sseCustomerKey = new SSECustomerKey(base64EncodedKey); getObjectMetadataRequest.setSSECustomerKey(sseCustomerKey); - ObjectMetadata objectMetadata = cosclient.getObjectMetadata(getObjectMetadataRequest); + ObjectMetadata objectMetadata = cosClient.getObjectMetadata(getObjectMetadataRequest); System.out.println(objectMetadata); } catch (CosServiceException e) { e.printStackTrace(); } catch (CosClientException e) { e.printStackTrace(); } - // 关闭客户端 - cosclient.shutdown(); } }