diff --git a/xos-java-demo/src/main/java/com/ctyun/DemoMain.java b/xos-java-demo/src/main/java/com/ctyun/DemoMain.java index 60e2f33dd8e2bce314a90ff0cf764aa51c816a26..af9df00982cce5ea3718d11f7cd6235c0806cd60 100644 --- a/xos-java-demo/src/main/java/com/ctyun/DemoMain.java +++ b/xos-java-demo/src/main/java/com/ctyun/DemoMain.java @@ -2,8 +2,6 @@ package com.ctyun; import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; -import com.amazonaws.services.securitytoken.model.Credentials; -import com.ctyun.extra.ObjectPostDemo; public class DemoMain { public static void main(String[] args) { @@ -38,6 +36,8 @@ public class DemoMain { // s3.setObjectTagging(); // s3.getObjectTagging(); // s3.deleteObjectTagging(); + // s3.restoreObject(); + // s3.getGlacierObjectStatus(); // StsServerDemo stsServer = new StsServerDemo(); // Credentials credentials = stsServer.assumeRole(); diff --git a/xos-java-demo/src/main/java/com/ctyun/S3Demo.java b/xos-java-demo/src/main/java/com/ctyun/S3Demo.java index 2f5c4a2f44efd0930ff18633aaf2852625fb24c3..355c9a5a1f26c6d70112464f1c03418af5fbef65 100644 --- a/xos-java-demo/src/main/java/com/ctyun/S3Demo.java +++ b/xos-java-demo/src/main/java/com/ctyun/S3Demo.java @@ -113,6 +113,9 @@ import com.amazonaws.services.s3.model.VersionListing; import com.amazonaws.services.s3.model.lifecycle.LifecycleFilter; import com.amazonaws.services.s3.model.lifecycle.LifecycleFilterPredicate; import com.amazonaws.services.s3.model.lifecycle.LifecyclePrefixPredicate; +import com.amazonaws.services.s3.model.RestoreObjectRequest; +import com.amazonaws.services.s3.model.RestoreObjectResult; +import com.amazonaws.services.s3.model.GlacierObjectStatusResult; import com.amazonaws.util.IOUtils; public class S3Demo { @@ -299,6 +302,7 @@ public class S3Demo { metadata.setContentType("text/plain"); AppendObjectRequest req = new AppendObjectRequest(bucket, key, is, metadata); + // req.setStorageClass(StorageClass.Standard); // 设置对象的存储类型 req.setPosition(contentLength); s3Client.appendObject(req); System.out.println("putObjectAppend success"); @@ -309,6 +313,7 @@ public class S3Demo { String key = "ExampleObject.txt"; InitiateMultipartUploadRequest initReq = new InitiateMultipartUploadRequest(bucket, key); initReq.withCannedACL(CannedAccessControlList.PublicRead); + // initReq.setStorageClass(StorageClass.Standard); // 设置对象的存储类型 InitiateMultipartUploadResult initRes = s3Client.initiateMultipartUpload(initReq); System.out.println("multiPartUpload: init success, uploadId=" + initRes.getUploadId()); @@ -500,7 +505,7 @@ public class S3Demo { // mtime rule BucketLifecycleConfiguration.Transition transition = new BucketLifecycleConfiguration.Transition(); transition.setDays(1); - transition.setStorageClass(StorageClass.ReducedRedundancy); + transition.setStorageClass(StorageClass.StandardInfrequentAccess); BucketLifecycleConfiguration.NoncurrentVersionTransition ncvtransition = new BucketLifecycleConfiguration.NoncurrentVersionTransition(); ncvtransition.setDays(2); ncvtransition.setStorageClass(StorageClass.StandardInfrequentAccess); @@ -508,7 +513,7 @@ public class S3Demo { // atime rule BucketLifecycleConfiguration.AtimeTransition aTimeTransition = new BucketLifecycleConfiguration.AtimeTransition(); aTimeTransition.setDays(3); - aTimeTransition.setStorageClass(StorageClass.ReducedRedundancy); + aTimeTransition.setStorageClass(StorageClass.StandardInfrequentAccess); BucketLifecycleConfiguration.AtimeNoncurrentVersionTransition aTimeNcvtransition = new BucketLifecycleConfiguration.AtimeNoncurrentVersionTransition(); aTimeNcvtransition.setDays(4); aTimeNcvtransition.setStorageClass(StorageClass.StandardInfrequentAccess); @@ -601,7 +606,7 @@ public class S3Demo { System.out.println("changeMetadataViaCopyObject success"); } - public void copyObject() throws AmazonClientException { + public void copyObject() throws AmazonClientException, InterruptedException { String oriBucket = bucket; String destBucket = bucket; String oriKey = "ExampleObject.txt"; @@ -609,6 +614,12 @@ public class S3Demo { ObjectMetadata metadataCopy = new ObjectMetadata(); metadataCopy.setContentType("text/json"); CopyObjectRequest request = new CopyObjectRequest(oriBucket, oriKey, destBucket, destKey); + // request.setStorageClass(StorageClass.Standard); // 设置对象的存储类型 + // 如果源对象是归档存储类型,需要先解冻对象 + // ObjectUnfreezeSDK unfreezeSDK = new ObjectUnfreezeSDK(ACCESS_KEY, SECRET_KEY, END_POINT); + // System.out.println(unfreezeSDK.unfreeze(oriBucket, oriKey)); + // Thread.sleep(60000); // 等待解冻完成 + s3Client.copyObject(request); System.out.println("changeMetadataViaCopyObject success"); } @@ -771,4 +782,24 @@ public class S3Demo { s3Client.deleteBucketEncryption(bucket); System.out.println("deleteBucketEncryption success"); } + + public void restoreObject() { + System.out.println("restoreObject"); + String key = "ExampleObject.txt"; + + RestoreObjectRequest req = new RestoreObjectRequest(bucket, key); + req.setExpirationInDays(1); // 设置对象从归档恢复后的可用期限 + + RestoreObjectResult ret = s3Client.restoreObjectV2(req); + System.out.println(ret); + } + + public void getGlacierObjectStatus() { + System.out.println("getGlacierObjectStatus"); + String key = "ExampleObject.txt"; + + GlacierObjectStatusResult restoreStatus = s3Client.getGlacierObjectStatus(bucket, key); + System.out.println("getGlacierObjectStatus success, glacier object status: " + restoreStatus.getObjectStatus()); + } + } diff --git a/xos-java-demo/src/main/java/com/ctyun/TransDemo.java b/xos-java-demo/src/main/java/com/ctyun/TransDemo.java index 15ad3b74a886ba73ee1eccf5b951d38d42d24e32..0c8585802c4a5e3cf5879b279a53b0b185bcacb4 100644 --- a/xos-java-demo/src/main/java/com/ctyun/TransDemo.java +++ b/xos-java-demo/src/main/java/com/ctyun/TransDemo.java @@ -8,6 +8,7 @@ import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.internal.Mimetypes; +import com.amazonaws.services.s3.model.StorageClass; import com.amazonaws.services.s3.model.CannedAccessControlList; import com.amazonaws.services.s3.model.CopyObjectRequest; import com.amazonaws.services.s3.model.ObjectMetadata; @@ -57,6 +58,7 @@ public class TransDemo { // TransferManager 采用异步方式进行处理,因此该调用会立即返回。 PutObjectRequest request = new PutObjectRequest(bucket, key, new File(localPath)); request.withCannedAcl(CannedAccessControlList.Private); // 设置对象ACL,可以设置公共读CannedAccessControlList.PublicRead + // request.setStorageClass(StorageClass.Glacier); // 设置对象的存储类别 ObjectMetadata meta = new ObjectMetadata(); meta.setContentType("application/octet-stream"); // 设置Content-Type,默认application/octet-stream //meta.setContentType(Mimetypes.getInstance().getMimetype(key)); diff --git a/xos-java-demo/src/main/java/com/ctyun/extra/ObjectPostDemo.java b/xos-java-demo/src/main/java/com/ctyun/extra/ObjectPostDemo.java index 0ec3fccdacbff056e29bf0d88e133971c2645610..2177c037577b30e54b9961539ad19a508ebb9a21 100644 --- a/xos-java-demo/src/main/java/com/ctyun/extra/ObjectPostDemo.java +++ b/xos-java-demo/src/main/java/com/ctyun/extra/ObjectPostDemo.java @@ -1,5 +1,6 @@ package com.ctyun.extra; +import com.amazonaws.services.s3.model.StorageClass; import com.ctyun.Config; import java.io.*; @@ -36,12 +37,14 @@ public class ObjectPostDemo { for (Entry entry: formFields.entrySet()){ System.out.println(entry.getKey() + ":" + entry.getValue()); } + // String storageClass = StorageClass.Standard.toString(); // 设置对象存储类型,默认为STANDARD + // String ret = formUpload(data.getUrl(), data.getFormFields(), localFilePath, storageClass); String ret = formUpload(data.getUrl(), data.getFormFields(), localFilePath); System.out.println("Post Object [" + objectKey + "] to bucket [" + bucketName + "]"); System.out.println("post response:" + ret); } - private String formUpload(String urlStr, Map formFields, String localFile) { + private String formUpload(String urlStr, Map formFields, String localFile, String storageClass) { String res = ""; HttpURLConnection conn = null; try { @@ -55,6 +58,9 @@ public class ObjectPostDemo { conn.setRequestMethod("POST"); conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)"); conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); + // 设置对象存储类别 + conn.setRequestProperty("X-Amz-Storage-Class", storageClass); + OutputStream out = new DataOutputStream(conn.getOutputStream()); // 1. send form fields @@ -124,4 +130,8 @@ public class ObjectPostDemo { } return res; } + + private String formUpload(String urlStr, Map formFields, String localFile) { + return formUpload(urlStr, formFields, localFile, StorageClass.Standard.toString()); + } } \ No newline at end of file diff --git a/xos-java-demo/xos-java-sdk-2.1.1.jar b/xos-java-demo/xos-java-sdk-2.1.1.jar index 99da3d1d89b15591cf4971106df2f211ee73dbd5..1cb88c62355b1d40165ab9077910fd32337abc84 100644 Binary files a/xos-java-demo/xos-java-sdk-2.1.1.jar and b/xos-java-demo/xos-java-sdk-2.1.1.jar differ