From e787615ab40c8ed8452f3214a5686db44d100697 Mon Sep 17 00:00:00 2001
From: yangpeng <183851063@qq.com>
Date: Tue, 3 Jan 2023 14:30:23 +0800
Subject: [PATCH] add bucket access monitor api and modify bucket lifecycle
rule
---
samples/Bucket.php | 2 +
samples/BucketAccessMonitor.php | 62 +++
samples/BucketLifecycle.php | 356 +++++++++++++++++-
samples/Object.php | 27 ++
src/OSS/Model/AccessMonitorConfig.php | 68 ++++
src/OSS/Model/BucketInfo.php | 20 +
.../Model/LifecycleAbortMultipartUpload.php | 88 +++++
src/OSS/Model/LifecycleAction.php | 88 -----
src/OSS/Model/LifecycleConfig.php | 40 +-
src/OSS/Model/LifecycleExpiration.php | 145 +++++++
.../LifecycleNoncurrentVersionExpiration.php | 59 +++
.../LifecycleNoncurrentVersionTransition.php | 140 +++++++
src/OSS/Model/LifecycleRule.php | 206 ++++++++--
src/OSS/Model/LifecycleTag.php | 93 +++++
src/OSS/Model/LifecycleTransition.php | 171 +++++++++
src/OSS/Model/RefererConfig.php | 2 +-
src/OSS/OssClient.php | 68 +++-
.../Result/GetBucketAccessMonitorResult.php | 23 ++
tests/OSS/Tests/AccessMonitorConfigTest.php | 57 +++
.../GetBucketAccessMonitorResultTest.php | 63 ++++
tests/OSS/Tests/GetLifecycleResultTest.php | 51 ++-
tests/OSS/Tests/LifecycleConfigTest.php | 240 +++++++++---
.../OssClientBucketAccessMonitorTest.php | 106 ++++++
tests/OSS/Tests/OssClientBucketInfoTest.php | 1 +
.../Tests/OssClientBucketLifecycleTest.php | 145 ++++++-
tests/OSS/Tests/OssClientObjectTest.php | 18 +
26 files changed, 2132 insertions(+), 207 deletions(-)
create mode 100644 samples/BucketAccessMonitor.php
create mode 100644 src/OSS/Model/AccessMonitorConfig.php
create mode 100644 src/OSS/Model/LifecycleAbortMultipartUpload.php
delete mode 100644 src/OSS/Model/LifecycleAction.php
create mode 100644 src/OSS/Model/LifecycleExpiration.php
create mode 100644 src/OSS/Model/LifecycleNoncurrentVersionExpiration.php
create mode 100644 src/OSS/Model/LifecycleNoncurrentVersionTransition.php
create mode 100644 src/OSS/Model/LifecycleTag.php
create mode 100644 src/OSS/Model/LifecycleTransition.php
create mode 100644 src/OSS/Result/GetBucketAccessMonitorResult.php
create mode 100644 tests/OSS/Tests/AccessMonitorConfigTest.php
create mode 100644 tests/OSS/Tests/GetBucketAccessMonitorResultTest.php
create mode 100644 tests/OSS/Tests/OssClientBucketAccessMonitorTest.php
diff --git a/samples/Bucket.php b/samples/Bucket.php
index a54b74e6..50a77e59 100644
--- a/samples/Bucket.php
+++ b/samples/Bucket.php
@@ -29,6 +29,7 @@
// Get the info of bucket
$info = $ossClient->getBucketInfo($bucket);
Common::println("bucket name:".$info->getName()."\n");
+Common::println("bucket access monitor:".$info->getAccessMonitor()."\n");
Common::println("bucket location:". $info->getLocation()."\n");
Common::println("bucket creation time:".$info->getCreateDate()."\n");
Common::println("bucket storage class:".$info->getStorageClass()."\n");
@@ -114,6 +115,7 @@ function getBucketInfo($ossClient, $bucket)
try {
$info = $ossClient->getBucketInfo($bucket);
printf("bucket name:%s\n", $info->getName());
+ printf("bucket access monitor:%s",$info->getAccessMonitor()."\n");
printf("bucket location:%s\n", $info->getLocation());
printf("bucket creation time:%s\n", $info->getCreateDate());
printf("bucket storage class:%s\n", $info->getStorageClass());
diff --git a/samples/BucketAccessMonitor.php b/samples/BucketAccessMonitor.php
new file mode 100644
index 00000000..63adc4e7
--- /dev/null
+++ b/samples/BucketAccessMonitor.php
@@ -0,0 +1,62 @@
+putBucketAccessMonitor($bucket, $status);
+printf('Put Bucket Access Monitor Success' . "\n");
+
+
+// get access monitor
+$status = $ossClient->getBucketAccessMonitor($bucket);
+printf('Get Bucket Access Monitor Status:%s'."\n",$status);
+
+
+//******************************* For complete usage, see the following functions ****************************************************
+putBucketAccessMonitor($ossClient,$bucket);
+getBucketAccessMonitor($ossClient,$bucket);
+
+/**
+ * Put Bucket Access Monitor
+ * @param $ossClient OssClient
+ * @param string $bucket bucket_name string
+ */
+function putBucketAccessMonitor($ossClient, $bucket)
+{
+ try{
+ $status = 'Enabled'; // set Enabled to enable access monitor; set Disabled to disable access monitor
+ $ossClient->putBucketAccessMonitor($bucket,$status);
+ printf('Put Bucket Access Monitor Success' . "\n");
+ } catch(OssException $e) {
+ printf($e->getMessage() . "\n");
+ return;
+ }
+ print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Get Bucket Access Monitor
+ * @param $ossClient OssClient
+ * @param string $bucket bucket_name
+ */
+function getBucketAccessMonitor($ossClient, $bucket)
+{
+ try{
+ $status = $ossClient->getBucketAccessMonitor($bucket);
+ printf('Get Bucket Access Monitor Status:%s'."\n",$status);
+ } catch(OssException $e) {
+ printf($e->getMessage() . "\n");
+ return;
+ }
+ print(__FUNCTION__ . ": OK" . "\n");
+}
diff --git a/samples/BucketLifecycle.php b/samples/BucketLifecycle.php
index 04d2edd6..1c74e209 100644
--- a/samples/BucketLifecycle.php
+++ b/samples/BucketLifecycle.php
@@ -3,9 +3,14 @@
use OSS\OssClient;
use OSS\Core\OssException;
-use OSS\Model\LifecycleAction;
-use OSS\Model\LifecycleConfig;
use OSS\Model\LifecycleRule;
+use OSS\Model\LifecycleConfig;
+use OSS\Model\LifecycleExpiration;
+use OSS\Model\LifecycleAbortMultipartUpload;
+use OSS\Model\LifecycleTag;
+use OSS\Model\LifecycleTransition;
+use OSS\Model\LifecycleNoncurrentVersionTransition;
+
$bucket = Common::getBucketName();
$ossClient = Common::getOssClient();
@@ -15,10 +20,103 @@
// Set lifecycle configuration
$lifecycleConfig = new LifecycleConfig();
-$actions = array();
-$actions[] = new LifecycleAction("Expiration", "Days", 3);
-$lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions);
-$lifecycleConfig->addRule($lifecycleRule);
+
+// rule 1: the lifecycle rule ID is' rule1 ', the prefix is' logs/', and the status is' Enabled '
+$rule1 = new LifecycleRule("rule1", "logs/", LifecycleRule::STATUS_ENANLED);
+$lifecycleExpiration = new LifecycleExpiration();
+//set expiration time
+$lifecycleExpiration->setDays(3);
+$rule1->setExpiration($lifecycleExpiration);
+
+// The expired attributes that have not been uploaded will take effect one day after the object is last updated.
+$lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload();
+$lifecycleAbortMultipartUpload->setDays(1);
+$rule1->setAbortMultipartUpload($lifecycleAbortMultipartUpload);
+
+$lifecycleConfig->addRule($rule1);
+
+// rule 2: set id,prefix,status
+$rule2 = new LifecycleRule("rule2", "logs2/", LifecycleRule::STATUS_ENANLED);
+// Convert the object storage type to AI within 30 days
+$lifecycleTransition = new LifecycleTransition();
+$lifecycleTransition->setDays(30);
+$lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA);
+$rule2->setTransition($lifecycleTransition);
+// Convert the object storage type to Archive within 60 days
+$lifecycleTransition = new LifecycleTransition();
+$lifecycleTransition->setDays(60);
+$lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_ARCHIVE);
+$rule2->setTransition($lifecycleTransition);
+
+$lifecycleExpiration = new LifecycleExpiration();
+// The specified lifecycle rule takes effect 180 days after the object is last updated.
+$lifecycleExpiration->setDays(180);
+$rule2->setExpiration($lifecycleExpiration);
+$lifecycleConfig->addRule($rule2);
+
+// rule 3: add expiration CreatedBeforeDate and AbortMultipartUpload CreatedBeforeDate
+$rule3 = new LifecycleRule("rule3", "logs3/", LifecycleRule::STATUS_ENANLED);
+$lifecycleExpiration = new LifecycleExpiration();
+// The last update time is earlier than 2017-01-01T00:00:00.000Z object to be overdue
+$lifecycleExpiration->setCreatedBeforeDate("2017-01-01T00:00:00.000Z");
+$rule3->setExpiration($lifecycleExpiration);
+
+// The last update time is earlier than 2017-01-01T00:00:00.000Z Multipart to be overdue
+$lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload();
+$lifecycleAbortMultipartUpload->setCreatedBeforeDate("2017-01-01T00:00:00.000Z");
+$rule3->setAbortMultipartUpload($lifecycleAbortMultipartUpload);
+$lifecycleConfig->addRule($rule3);
+
+// rule 4: add two tags
+$rule4 = new LifecycleRule("rule4", "logs4/", LifecycleRule::STATUS_ENANLED);
+
+$tag = new LifecycleTag();
+$tag->setKey("key1");
+$tag->setValue("val1");
+$rule4->setTag($tag);
+
+$tag2 = new LifecycleTag();
+$tag2->setKey("key12");
+$tag2->setValue("val12");
+$rule4->setTag($tag2);
+$lifecycleConfig->addRule($rule4);
+$lifecycleTransition = new LifecycleTransition();
+$lifecycleTransition->setDays(30);
+$lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA);
+$rule4->setTransition($lifecycleTransition);
+
+
+// rule 5: transition add IsAccessTime false
+$rule5 = new LifecycleRule("rule5", "logs5/", LifecycleRule::STATUS_ENANLED);
+
+$lifecycleTransition = new LifecycleTransition();
+$lifecycleTransition->setDays(30);
+$lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA);
+$lifecycleTransition->setIsAccessTime(false);
+$rule5->setTransition($lifecycleTransition);
+$lifecycleConfig->addRule($rule5);
+
+// rule 6: set id,prefix,status transition add IsAccessTime,ReturnToStdWhenVisit
+$rule6 = new LifecycleRule("rule6", "logs6/", LifecycleRule::STATUS_ENANLED);
+
+$lifecycleTransition = new LifecycleTransition();
+$lifecycleTransition->setDays(30);
+$lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA);
+$lifecycleTransition->setIsAccessTime(true);
+$lifecycleTransition->setReturnToStdWhenVisit(false);
+$rule6->setTransition($lifecycleTransition);
+$lifecycleConfig->addRule($rule6);
+
+// rule 7: set id,prefix,status NoncurrentVersionExpiration addIsAccessTime,ReturnToStdWhenVisit
+$rule7 = new LifecycleRule("rule7", "logs7/", LifecycleRule::STATUS_ENANLED);
+
+$nonTransition = new LifecycleNoncurrentVersionTransition();
+$nonTransition->setNoncurrentDays(30);
+$nonTransition->setStorageClass($ossClient::OSS_STORAGE_IA);
+$nonTransition->setIsAccessTime(true);
+$nonTransition->setReturnToStdWhenVisit(true);
+$rule7->setNoncurrentVersionTransition($nonTransition);
+$lifecycleConfig->addRule($rule7);
$ossClient->putBucketLifecycle($bucket, $lifecycleConfig);
Common::println("bucket $bucket lifecycleConfig created:" . $lifecycleConfig->serializeToXml());
@@ -26,6 +124,77 @@
$lifecycleConfig = $ossClient->getBucketLifecycle($bucket);
Common::println("bucket $bucket lifecycleConfig fetched:" . $lifecycleConfig->serializeToXml());
+// print lifecycle config
+$rules = $lifecycleConfig->getRules();
+foreach ($rules as $rule){
+ printf("=====================".$rule->getId()."====info================".PHP_EOL);
+ printf("Rule Id:".$rule->getId().PHP_EOL);
+ printf("Rule Status:".$rule->getStatus().PHP_EOL);
+ printf("Rule Prefix:".$rule->getPrefix().PHP_EOL);
+
+ // print expiration
+ $expiration = $rule->getExpiration();
+ if (isset($expiration)){
+ if ($expiration->getDays()){
+ printf("Rule Expiration Days:".$expiration->getDays().PHP_EOL);
+ }
+ if ($expiration->getDate()){
+ printf("Rule Expiration Date:".$expiration->getDate().PHP_EOL);
+ }
+ if ($expiration->getCreatedBeforeDate()){
+ printf("Rule Expiration Created Before Date:".$expiration->getCreatedBeforeDate().PHP_EOL);
+ }
+ if ($expiration->getExpiredObjectDeleteMarker()){
+ printf("Rule Expiration Expired Object Delete Marker:".$expiration->getExpiredObjectDeleteMarker().PHP_EOL);
+ }
+ }
+
+ // print tag
+ $tags = $rule->getTag();
+ if (isset($tags)){
+ foreach ($tags as $tag){
+ printf("Rule Tag Key:".$tag->getKey().PHP_EOL);
+ printf("Rule Tag Value:".$tag->getValue().PHP_EOL);
+ }
+ }
+ // print transition
+ $transitions = $rule->getTransition();
+ if (isset($transitions)){
+ foreach ($transitions as $transition){
+ printf("Rule Transition Days:".$transition->getDays().PHP_EOL);
+ printf("Rule Transition Created Before Date:".$transition->getCreatedBeforeDate().PHP_EOL);
+ printf("Rule Transition Storage Class:".$transition->getStorageClass().PHP_EOL);
+ printf("Rule Transition Is Access Time:".$transition->getIsAccessTime().PHP_EOL);
+ printf("Rule Transition Return To Std When Visit:".$transition->getReturnToStdWhenVisit().PHP_EOL);
+ }
+ }
+
+ //print Abort Multipart Upload
+ $abortMultipartUpload = $rule->getAbortMultipartUpload();
+ if (isset($abortMultipartUpload)){
+ if ($abortMultipartUpload->getDays()){
+ printf("Rule Abort Multipart Upload Days:".$abortMultipartUpload->getDays().PHP_EOL);
+ }
+
+ if ($abortMultipartUpload->getCreatedBeforeDate()){
+ printf("Rule Abort Multipart Upload Created Before Date:".$abortMultipartUpload->getCreatedBeforeDate().PHP_EOL);
+ }
+
+ }
+
+ //print Noncurrent Version Transition
+ $nonVersionTransitions = $rule->getNoncurrentVersionTransition();
+ if (isset($nonVersionTransitions)){
+ foreach ($nonVersionTransitions as $nonVersionTransition){
+ printf("Rule Non Version Transition Non Current Days:".$nonVersionTransition->getNoncurrentDays().PHP_EOL);
+ printf("Rule Non Version Transition Storage Class:".$nonVersionTransition->getStorageClass().PHP_EOL);
+ printf("Rule Non Version Transition Is Access Time:".$nonVersionTransition->getIsAccessTime().PHP_EOL);
+ printf("Rule Non Version Transition Return To Std When Visit:".$nonVersionTransition->getReturnToStdWhenVisit().PHP_EOL);
+ }
+ }
+
+}
+
// Delete bucket lifecycle configuration
$ossClient->deleteBucketLifecycle($bucket);
Common::println("bucket $bucket lifecycleConfig deleted");
@@ -47,15 +216,102 @@
*/
function putBucketLifecycle($ossClient, $bucket)
{
+ // Set lifecycle configuration
$lifecycleConfig = new LifecycleConfig();
- $actions = array();
- $actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DAYS, 3);
- $lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions);
- $lifecycleConfig->addRule($lifecycleRule);
- $actions = array();
- $actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DATE, '2022-10-12T00:00:00.000Z');
- $lifecycleRule = new LifecycleRule("delete temporary files", "temporary/", "Enabled", $actions);
- $lifecycleConfig->addRule($lifecycleRule);
+
+ // rule 1: the lifecycle rule ID is' rule1 ', the prefix is' logs/', and the status is' Enabled '
+ $rule1 = new LifecycleRule("rule1", "logs/", LifecycleRule::STATUS_ENANLED);
+ $lifecycleExpiration = new LifecycleExpiration();
+ //set expiration time
+ $lifecycleExpiration->setDays(3);
+ $rule1->setExpiration($lifecycleExpiration);
+
+ // The expired attributes that have not been uploaded will take effect one day after the object is last updated.
+ $lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload();
+ $lifecycleAbortMultipartUpload->setDays(1);
+ $rule1->setAbortMultipartUpload($lifecycleAbortMultipartUpload);
+
+ $lifecycleConfig->addRule($rule1);
+
+ // rule 2: the lifecycle rule ID is' rule2 ', the prefix is' logs2/', and the status is' Enabled '
+ $rule2 = new LifecycleRule("rule2", "logs2/", LifecycleRule::STATUS_ENANLED);
+ // Convert the object storage type to AI within 30 days
+ $lifecycleTransition = new LifecycleTransition();
+ $lifecycleTransition->setDays(30);
+ $lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA);
+ $rule2->setTransition($lifecycleTransition);
+ // Convert the object storage type to Archive within 60 days
+ $lifecycleTransition = new LifecycleTransition();
+ $lifecycleTransition->setDays(60);
+ $lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_ARCHIVE);
+ $rule2->setTransition($lifecycleTransition);
+
+ $lifecycleExpiration = new LifecycleExpiration();
+ // The specified lifecycle rule takes effect 180 days after the object is last updated.
+ $lifecycleExpiration->setDays(180);
+ $rule2->setExpiration($lifecycleExpiration);
+ $lifecycleConfig->addRule($rule2);
+
+ // rule 3
+ $rule3 = new LifecycleRule("rule3", "logs3/", LifecycleRule::STATUS_ENANLED);
+ $lifecycleExpiration = new LifecycleExpiration();
+ // The last update time is earlier than 2017-01-01T00:00:00.000Z object to be overdue
+ $lifecycleExpiration->setCreatedBeforeDate("2017-01-01T00:00:00.000Z");
+ $rule3->setExpiration($lifecycleExpiration);
+
+ // The last update time is earlier than 2017-01-01T00:00:00.000Z Multipart to be overdue
+ $lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload();
+ $lifecycleAbortMultipartUpload->setCreatedBeforeDate("2017-01-01T00:00:00.000Z");
+ $rule3->setAbortMultipartUpload($lifecycleAbortMultipartUpload);
+ $lifecycleConfig->addRule($rule3);
+
+ // rule 4: add two tags
+ $rule4 = new LifecycleRule("rule4", "logs4/", LifecycleRule::STATUS_ENANLED);
+
+ $tag = new LifecycleTag();
+ $tag->setKey("key1");
+ $tag->setValue("val1");
+ $rule4->setTag($tag);
+ $tag2 = new LifecycleTag();
+ $tag2->setKey("key12");
+ $tag2->setValue("val12");
+ $rule4->setTag($tag2);
+ $lifecycleConfig->addRule($rule4);
+ $lifecycleTransition = new LifecycleTransition();
+ $lifecycleTransition->setDays(30);
+ $lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA);
+ $rule4->setTransition($lifecycleTransition);
+
+ // rule 5:
+ $rule5 = new LifecycleRule("rule5", "logs5/", LifecycleRule::STATUS_ENANLED);
+
+ $lifecycleTransition = new LifecycleTransition();
+ $lifecycleTransition->setDays(30);
+ $lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA);
+ $lifecycleTransition->setIsAccessTime(false);
+ $rule5->setTransition($lifecycleTransition);
+ $lifecycleConfig->addRule($rule5);
+
+ // rule 6t
+ $rule6 = new LifecycleRule("rule6", "logs6/", LifecycleRule::STATUS_ENANLED);
+
+ $lifecycleTransition = new LifecycleTransition();
+ $lifecycleTransition->setDays(30);
+ $lifecycleTransition->setStorageClass($ossClient::OSS_STORAGE_IA);
+ $lifecycleTransition->setIsAccessTime(true);
+ $lifecycleTransition->setReturnToStdWhenVisit(false);
+ $rule6->setTransition($lifecycleTransition);
+ $lifecycleConfig->addRule($rule6);
+
+ // rule 7
+ $rule7 = new LifecycleRule("rule7", "logs7/", LifecycleRule::STATUS_ENANLED);
+
+ $nonTransition = new LifecycleNoncurrentVersionTransition();
+ $nonTransition->setNoncurrentDays(30);
+ $nonTransition->setStorageClass($ossClient::OSS_STORAGE_IA);
+ $nonTransition->setIsAccessTime(true);
+ $nonTransition->setReturnToStdWhenVisit(true);
+ $rule7->setNoncurrentVersionTransition($nonTransition);
try {
$ossClient->putBucketLifecycle($bucket, $lifecycleConfig);
} catch (OssException $e) {
@@ -75,7 +331,6 @@ function putBucketLifecycle($ossClient, $bucket)
*/
function getBucketLifecycle($ossClient, $bucket)
{
- $lifecycleConfig = null;
try {
$lifecycleConfig = $ossClient->getBucketLifecycle($bucket);
} catch (OssException $e) {
@@ -83,8 +338,79 @@ function getBucketLifecycle($ossClient, $bucket)
printf($e->getMessage() . "\n");
return;
}
+
print(__FUNCTION__ . ": OK" . "\n");
print($lifecycleConfig->serializeToXml() . "\n");
+ // print lifecycle config
+ $rules = $lifecycleConfig->getRules();
+ foreach ($rules as $rule){
+ printf("=====================".$rule->getId()."====info================".PHP_EOL);
+ printf("Rule Id:".$rule->getId().PHP_EOL);
+ printf("Rule Status:".$rule->getStatus().PHP_EOL);
+ printf("Rule Prefix:".$rule->getPrefix().PHP_EOL);
+
+ // print expiration
+ $expiration = $rule->getExpiration();
+ if (isset($expiration)){
+ if ($expiration->getDays()){
+ printf("Rule Expiration Days:".$expiration->getDays().PHP_EOL);
+ }
+ if ($expiration->getDate()){
+ printf("Rule Expiration Date:".$expiration->getDate().PHP_EOL);
+ }
+ if ($expiration->getCreatedBeforeDate()){
+ printf("Rule Expiration Created Before Date:".$expiration->getCreatedBeforeDate().PHP_EOL);
+ }
+ if ($expiration->getExpiredObjectDeleteMarker()){
+ printf("Rule Expiration Expired Object Delete Marker:".$expiration->getExpiredObjectDeleteMarker().PHP_EOL);
+ }
+ }
+
+ // print tag
+ $tags = $rule->getTag();
+ if (isset($tags)){
+ foreach ($tags as $tag){
+ printf("Rule Tag Key:".$tag->getKey().PHP_EOL);
+ printf("Rule Tag Value:".$tag->getValue().PHP_EOL);
+ }
+ }
+ // print transition
+ $transitions = $rule->getTransition();
+ if (isset($transitions)){
+ foreach ($transitions as $transition){
+ printf("Rule Transition Days:".$transition->getDays().PHP_EOL);
+ printf("Rule Transition Created Before Date:".$transition->getCreatedBeforeDate().PHP_EOL);
+ printf("Rule Transition Storage Class:".$transition->getStorageClass().PHP_EOL);
+ printf("Rule Transition Is Access Time:".$transition->getIsAccessTime().PHP_EOL);
+ printf("Rule Transition Return To Std When Visit:".$transition->getReturnToStdWhenVisit().PHP_EOL);
+ }
+ }
+
+ //print Abort Multipart Upload
+ $abortMultipartUpload = $rule->getAbortMultipartUpload();
+ if (isset($abortMultipartUpload)){
+ if ($abortMultipartUpload->getDays()){
+ printf("Rule Abort Multipart Upload Days:".$abortMultipartUpload->getDays().PHP_EOL);
+ }
+
+ if ($abortMultipartUpload->getCreatedBeforeDate()){
+ printf("Rule Abort Multipart Upload Created Before Date:".$abortMultipartUpload->getCreatedBeforeDate().PHP_EOL);
+ }
+
+ }
+
+ //print Noncurrent Version Transition
+ $nonVersionTransitions = $rule->getNoncurrentVersionTransition();
+ if (isset($nonVersionTransitions)){
+ foreach ($nonVersionTransitions as $nonVersionTransition){
+ printf("Rule Non Version Transition Non Current Days:".$nonVersionTransition->getNoncurrentDays().PHP_EOL);
+ printf("Rule Non Version Transition Storage Class:".$nonVersionTransition->getStorageClass().PHP_EOL);
+ printf("Rule Non Version Transition Is Access Time:".$nonVersionTransition->getIsAccessTime().PHP_EOL);
+ printf("Rule Non Version Transition Return To Std When Visit:".$nonVersionTransition->getReturnToStdWhenVisit().PHP_EOL);
+ }
+ }
+
+ }
}
/**
diff --git a/samples/Object.php b/samples/Object.php
index bf6e86b0..27e7341b 100644
--- a/samples/Object.php
+++ b/samples/Object.php
@@ -31,6 +31,11 @@
$content = $ossClient->getObject($bucket, "b.file");
Common::println("b.file is fetched, the content is: " . $content);
+// Get an oss object meta
+$objectMeta = $ossClient->getSimplifiedObjectMeta($bucket, "b.file");
+Common::println("b.file last access time: " . $objectMeta['x-oss-last-access-time']);
+
+
// Add a symlink to an object
$content = $ossClient->putSymlink($bucket, "test-symlink", "b.file");
Common::println("test-symlink is created");
@@ -127,6 +132,7 @@
copyObject($ossClient, $bucket);
modifyMetaForObject($ossClient, $bucket);
getObjectMeta($ossClient, $bucket);
+getSimplifiedObjectMeta($ossClient, $bucket);
deleteObject($ossClient, $bucket);
deleteObjects($ossClient, $bucket);
doesObjectExist($ossClient, $bucket);
@@ -550,6 +556,27 @@ function getObjectMeta($ossClient, $bucket)
}
}
+/**
+ * Get object simple meta, that is, getSimplifiedObjectMeta
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function getSimplifiedObjectMeta($ossClient, $bucket)
+{
+ $object = "oss-php-sdk-test/upload-test-object-name.txt";
+ try {
+ $objectMeta = $ossClient->getSimplifiedObjectMeta($bucket, $object);
+ printf("last-access-time:%s",$objectMeta['x-oss-last-access-time']);
+ } catch (OssException $e) {
+ printf(__FUNCTION__ . ": FAILED\n");
+ printf($e->getMessage() . "\n");
+ return;
+ }
+ print(__FUNCTION__ . ": OK" . "\n");
+}
+
/**
* Delete an object
*
diff --git a/src/OSS/Model/AccessMonitorConfig.php b/src/OSS/Model/AccessMonitorConfig.php
new file mode 100644
index 00000000..4e50b98c
--- /dev/null
+++ b/src/OSS/Model/AccessMonitorConfig.php
@@ -0,0 +1,68 @@
+Status)) {
+ $this->status = strval($xml->Status);
+ }
+ }
+
+ /**
+ * Serialize the object into xml string.
+ *
+ * @return string
+ */
+ public function serializeToXml()
+ {
+ $xml = new \SimpleXMLElement('');
+ if (isset($this->status)) {
+ $xml->addChild('Status',$this->status);
+ }
+ return $xml->asXML();
+ }
+
+ public function __toString()
+ {
+ return $this->serializeToXml();
+ }
+
+
+ /**
+ * @return string
+ */
+ public function getStatus()
+ {
+ return $this->status;
+ }
+
+ /**
+ * @param string $status
+ */
+ public function setStatus($status)
+ {
+ $this->status = $status;
+ }
+ /**
+ * @var string
+ */
+ private $status;
+}
+
+
diff --git a/src/OSS/Model/BucketInfo.php b/src/OSS/Model/BucketInfo.php
index e211eed6..71be28e0 100644
--- a/src/OSS/Model/BucketInfo.php
+++ b/src/OSS/Model/BucketInfo.php
@@ -45,6 +45,16 @@ public function getName()
return $this->name;
}
+ /**
+ * Get access monitor
+ *
+ * @return string
+ */
+ public function getAccessMonitor()
+ {
+ return $this->accessMonitor;
+ }
+
/**
* Get bucket creation time.
*
@@ -111,6 +121,9 @@ public function parseFromXmlNode($xml)
if (isset($xml->Name)) {
$this->name = strval($xml->Name);
}
+ if (isset($xml->AccessMonitor)) {
+ $this->accessMonitor = strval($xml->AccessMonitor);
+ }
if (isset($xml->CreationDate)) {
$this->createDate = strval($xml->CreationDate);
}
@@ -144,6 +157,13 @@ public function parseFromXmlNode($xml)
*/
private $name;
+ /**
+ * access monitor
+ *
+ * @var string
+ */
+ private $accessMonitor;
+
/**
* bucket creation time
*
diff --git a/src/OSS/Model/LifecycleAbortMultipartUpload.php b/src/OSS/Model/LifecycleAbortMultipartUpload.php
new file mode 100644
index 00000000..4de2f783
--- /dev/null
+++ b/src/OSS/Model/LifecycleAbortMultipartUpload.php
@@ -0,0 +1,88 @@
+days = $days;
+ $this->createdBeforeDate = $createdBeforeDate;
+ }
+ /**
+ * Get Days
+ *
+ * @return int
+ */
+ public function getDays()
+ {
+ return $this->days;
+ }
+
+ /**
+ * @param $days int
+ */
+ public function setDays($days)
+ {
+ $this->days = $days;
+ }
+
+ /**
+ * Get Created Before Date
+ *
+ * @return string
+ */
+ public function getCreatedBeforeDate()
+ {
+ return $this->createdBeforeDate;
+ }
+
+ /**
+ * Set Created Before Date
+ * @param $createdBeforeDate string
+ */
+ public function setCreatedBeforeDate($createdBeforeDate)
+ {
+ $this->createdBeforeDate = $createdBeforeDate;
+ }
+
+ /**
+ * @param \SimpleXMLElement $xmlRule
+ */
+ public function appendToXml(&$xmlRule)
+ {
+ if(isset($this->days) || isset($this->createdBeforeDate)){
+ $xmlAbortMultipartUpload = $xmlRule->addChild("AbortMultipartUpload");
+ }
+
+ if (isset($this->days)){
+ $xmlAbortMultipartUpload->addChild('Days', $this->days);
+ }
+
+ if (isset($this->createdBeforeDate)){
+ $xmlAbortMultipartUpload->addChild('CreatedBeforeDate', $this->createdBeforeDate);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/OSS/Model/LifecycleAction.php b/src/OSS/Model/LifecycleAction.php
deleted file mode 100644
index a0e21269..00000000
--- a/src/OSS/Model/LifecycleAction.php
+++ /dev/null
@@ -1,88 +0,0 @@
-action = $action;
- $this->timeSpec = $timeSpec;
- $this->timeValue = $timeValue;
- }
-
- /**
- * @return LifecycleAction
- */
- public function getAction()
- {
- return $this->action;
- }
-
- /**
- * @param string $action
- */
- public function setAction($action)
- {
- $this->action = $action;
- }
-
- /**
- * @return string
- */
- public function getTimeSpec()
- {
- return $this->timeSpec;
- }
-
- /**
- * @param string $timeSpec
- */
- public function setTimeSpec($timeSpec)
- {
- $this->timeSpec = $timeSpec;
- }
-
- /**
- * @return string
- */
- public function getTimeValue()
- {
- return $this->timeValue;
- }
-
- /**
- * @param string $timeValue
- */
- public function setTimeValue($timeValue)
- {
- $this->timeValue = $timeValue;
- }
-
- /**
- * Use appendToXml to insert actions into xml.
- *
- * @param \SimpleXMLElement $xmlRule
- */
- public function appendToXml(&$xmlRule)
- {
- $xmlAction = $xmlRule->addChild($this->action);
- $xmlAction->addChild($this->timeSpec, $this->timeValue);
- }
-
- private $action;
- private $timeSpec;
- private $timeValue;
-
-}
\ No newline at end of file
diff --git a/src/OSS/Model/LifecycleConfig.php b/src/OSS/Model/LifecycleConfig.php
index f2d2dc33..ed161238 100644
--- a/src/OSS/Model/LifecycleConfig.php
+++ b/src/OSS/Model/LifecycleConfig.php
@@ -4,9 +4,8 @@
use OSS\Core\OssException;
-
/**
- * Class BucketLifecycleConfig
+ * Class LifecycleConfig
* @package OSS\Model
* @link http://help.aliyun.com/document_detail/oss/api-reference/bucket/PutBucketLifecycle.html
*/
@@ -29,21 +28,34 @@ public function parseFromXml($strXml)
$id = strval($rule->ID);
$prefix = strval($rule->Prefix);
$status = strval($rule->Status);
- $actions = array();
+ $ruleTmp = new LifecycleRule($id, $prefix, $status);
foreach ($rule as $key => $value) {
- if ($key === 'ID' || $key === 'Prefix' || $key === 'Status') continue;
- $action = $key;
- $timeSpec = null;
- $timeValue = null;
- foreach ($value as $timeSpecKey => $timeValueValue) {
- $timeSpec = $timeSpecKey;
- $timeValue = strval($timeValueValue);
- }
- $actions[] = new LifecycleAction($action, $timeSpec, $timeValue);
+ if ($key === 'ID' || $key === 'Prefix' || $key === 'Status' || $key == "AtimeBase") continue;
+ $this->addNode($key, $value, $ruleTmp);
+ }
+ $this->rules[] = $ruleTmp;
+ }
+ }
+
+
+ /**
+ * @param $key string
+ * @param $value array
+ * @param $rule LifecycleRule
+ */
+ private function addNode($key,$value,$rule){
+ $class = "OSS\\Model\\Lifecycle".$key;
+ if (class_exists($class)){
+ $lifecycleNode = new $class();
+ foreach ($value as $k=> $val){
+ $func = 'set'.$k;
+ $lifecycleNode->$func($val);
}
- $this->rules[] = new LifecycleRule($id, $prefix, $status, $actions);
+ $funcTwo = 'set'.$key;
+ $rule->$funcTwo($lifecycleNode);
+ }else{
+ throw new OssException('Error: Could not find class ' . $class . '!');
}
- return;
}
diff --git a/src/OSS/Model/LifecycleExpiration.php b/src/OSS/Model/LifecycleExpiration.php
new file mode 100644
index 00000000..62b812de
--- /dev/null
+++ b/src/OSS/Model/LifecycleExpiration.php
@@ -0,0 +1,145 @@
+days = $days;
+ $this->date = $date;
+ $this->createdBeforeDate = $createdBeforeDate;
+ $this->expiredObjectDeleteMarker = $expiredObjectDeleteMarker;
+ }
+
+ /**
+ * Get Days
+ *
+ * @return int
+ */
+ public function getDays()
+ {
+ return $this->days;
+ }
+
+ /**
+ * @param $days int
+ */
+ public function setDays($days)
+ {
+ $this->days = $days;
+ }
+
+ /**
+ * Get date
+ * @return string
+ */
+ public function getDate()
+ {
+ return $this->date;
+ }
+
+ /**
+ * Set date
+ * @param $date string
+ */
+ public function setDate($date)
+ {
+ $this->date = $date;
+ }
+
+ /**
+ * Get Created Before Date
+ *
+ * @return string
+ */
+ public function getCreatedBeforeDate()
+ {
+ return $this->createdBeforeDate;
+ }
+
+ /**
+ * Set Created Before Date
+ * @param $createdBeforeDate string
+ */
+ public function setCreatedBeforeDate($createdBeforeDate)
+ {
+ $this->createdBeforeDate = $createdBeforeDate;
+ }
+
+ /**
+ * Get Expired Object DeleteMarker
+ * @return bool
+ */
+ public function getExpiredObjectDeleteMarker()
+ {
+ return $this->expiredObjectDeleteMarker;
+ }
+
+ /**
+ * Set Expired Object DeleteMarker
+ * @param $expiredObjectDeleteMarker bool
+ */
+ public function setExpiredObjectDeleteMarker($expiredObjectDeleteMarker)
+ {
+ $this->expiredObjectDeleteMarker = $expiredObjectDeleteMarker;
+ }
+
+ /**
+ * @param \SimpleXMLElement $xmlRule
+ */
+ public function appendToXml(&$xmlRule)
+ {
+ if(isset($this->days) || isset($this->date) || isset($this->createdBeforeDate) || isset($this->expiredObjectDeleteMarker)){
+ $xmlExpiration = $xmlRule->addChild("Expiration");
+ }
+
+ if (isset($this->days)){
+ $xmlExpiration->addChild('Days', $this->days);
+ }
+
+ if (isset($this->date)){
+ $xmlExpiration->addChild('Date', $this->date);
+ }
+
+ if (isset($this->createdBeforeDate)){
+ $xmlExpiration->addChild('CreatedBeforeDate', $this->createdBeforeDate);
+ }
+
+ if (isset($this->expiredObjectDeleteMarker)){
+ $xmlExpiration->addChild('ExpiredObjectDeleteMarker', is_bool($this->expiredObjectDeleteMarker) ? json_encode($this->expiredObjectDeleteMarker):$this->expiredObjectDeleteMarker);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/OSS/Model/LifecycleNoncurrentVersionExpiration.php b/src/OSS/Model/LifecycleNoncurrentVersionExpiration.php
new file mode 100644
index 00000000..e78b1012
--- /dev/null
+++ b/src/OSS/Model/LifecycleNoncurrentVersionExpiration.php
@@ -0,0 +1,59 @@
+noncurrentDays = $noncurrentDays;
+ }
+ /**
+ * Get Noncurrent Days
+ *
+ * @return int
+ */
+ public function getNoncurrentDays()
+ {
+ return $this->noncurrentDays;
+ }
+
+ /**
+ * Set Noncurrent Days
+ * @param $days int
+ */
+ public function setNoncurrentDays($noncurrentDays)
+ {
+ $this->noncurrentDays = $noncurrentDays;
+ }
+
+ /**
+ * @param \SimpleXMLElement $xmlRule
+ */
+ public function appendToXml(&$xmlRule)
+ {
+
+ if (isset($this->noncurrentDays)){
+ $xmlNoncurrentVersionExpiration = $xmlRule->addChild("NoncurrentVersionExpiration");
+ $xmlNoncurrentVersionExpiration->addChild('NoncurrentDays', $this->noncurrentDays);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/OSS/Model/LifecycleNoncurrentVersionTransition.php b/src/OSS/Model/LifecycleNoncurrentVersionTransition.php
new file mode 100644
index 00000000..57b1d0c1
--- /dev/null
+++ b/src/OSS/Model/LifecycleNoncurrentVersionTransition.php
@@ -0,0 +1,140 @@
+noncurrentDays = $noncurrentDays;
+ $this->storageClass = $storageClass;
+ $this->isAccessTime = $isAccessTime;
+ $this->returnToStdWhenVisit = $returnToStdWhenVisit;
+ }
+ /**
+ * Get Days
+ *
+ * @return int
+ */
+ public function getNoncurrentDays()
+ {
+ return $this->noncurrentDays;
+ }
+
+ /**
+ * @param $days int
+ */
+ public function setNoncurrentDays($nonCurrentDays)
+ {
+ $this->noncurrentDays = $nonCurrentDays;
+ }
+
+ /**
+ * Get storageClass
+ * @return string
+ */
+ public function getStorageClass(){
+ return $this->storageClass;
+ }
+
+ /**
+ * Set storageClass
+ * @param $storageClass string
+ */
+ public function setStorageClass($storageClass){
+ $this->storageClass = $storageClass;
+ }
+
+ /**
+ * Get isAccessTime
+ * @return boolean
+ */
+ public function getIsAccessTime(){
+ return $this->isAccessTime;
+ }
+
+ /**
+ * Set isAccessTime
+ * @param $isAccessTime boolean
+ */
+ public function setIsAccessTime($isAccessTime){
+ $this->isAccessTime = $isAccessTime;
+ }
+
+ /**
+ * Get Return To Std When Visit
+ * @return boolean
+ */
+ public function getReturnToStdWhenVisit(){
+ return $this->returnToStdWhenVisit;
+ }
+
+ /**
+ * Set Return To Std When Visit
+ * @param $isAccessTime boolean
+ */
+ public function setReturnToStdWhenVisit($returnToStdWhenVisit){
+ $this->returnToStdWhenVisit = $returnToStdWhenVisit;
+ }
+
+
+ /**
+ * @param \SimpleXMLElement $xmlRule
+ */
+ public function appendToXml(&$xmlRule)
+ {
+ if(isset($this->days) || isset($this->storageClass) || isset($this->isAccessTime) || isset($this->returnToStdWhenVisit) ){
+ $xmlNonTransition = $xmlRule->addChild("NoncurrentVersionTransition");
+ }
+
+ if (isset($this->noncurrentDays)){
+ $xmlNonTransition->addChild('NoncurrentDays', $this->noncurrentDays);
+ }
+
+ if (isset($this->storageClass)){
+ $xmlNonTransition->addChild('StorageClass', $this->storageClass);
+ }
+
+ if (isset($this->isAccessTime)){
+ $xmlNonTransition->addChild('IsAccessTime',is_bool($this->isAccessTime) ? json_encode($this->isAccessTime):$this->isAccessTime);
+ }
+
+ if (isset($this->returnToStdWhenVisit)){
+ $xmlNonTransition->addChild('ReturnToStdWhenVisit', is_bool($this->returnToStdWhenVisit) ? json_encode($this->returnToStdWhenVisit):$this->returnToStdWhenVisit);
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/OSS/Model/LifecycleRule.php b/src/OSS/Model/LifecycleRule.php
index 73c6cc35..99a2ce89 100644
--- a/src/OSS/Model/LifecycleRule.php
+++ b/src/OSS/Model/LifecycleRule.php
@@ -11,6 +11,67 @@
*/
class LifecycleRule
{
+
+ /**
+ * @var string
+ */
+ private $id;
+
+ /**
+ * @var string
+ */
+ private $prefix;
+
+ /**
+ * @var string
+ */
+ private $status;
+
+ /**
+ * @var LifecycleExpiration
+ */
+ private $expiration;
+ /**
+ * @var LifecycleAbortMultipartUpload
+ */
+ private $abortMultipartUpload;
+
+ /**
+ * @var LifecycleTag[]
+ */
+ private $tag = array();
+ /**
+ * @var LifecycleTransition[]
+ */
+ private $transition = array();
+
+ /**
+ * @var LifecycleNoncurrentVersionTransition[]
+ */
+ private $nonVersionTransition = array();
+
+ /**
+ * @var LifecycleNoncurrentVersionExpiration
+ */
+ private $noncurrentVersionExpiration;
+
+ const STATUS_ENANLED = "Enabled";
+ const STATUS_DISABLED = "Disabled";
+
+ /**
+ * LifecycleRule constructor.
+ *
+ * @param string $id rule Id
+ * @param string $prefix File prefix
+ * @param string $status Rule status
+ */
+ public function __construct($id, $prefix, $status)
+ {
+ $this->id = $id;
+ $this->prefix = $prefix;
+ $this->status = $status;
+ }
+
/**
* Get Id
*
@@ -70,39 +131,104 @@ public function setStatus($status)
}
/**
- *
- * @return LifecycleAction[]
+ * Get Lifecycle Expiration
+ * @return LifecycleExpiration
*/
- public function getActions()
- {
- return $this->actions;
+ public function getExpiration(){
+ return $this->expiration;
}
/**
- * @param LifecycleAction[] $actions
+ * Set Lifecycle Expiration
+ * @param $expiration LifecycleExpiration
*/
- public function setActions($actions)
- {
- $this->actions = $actions;
+ public function setExpiration($expiration){
+ $this->expiration = $expiration;
}
+ /**
+ * Get Lifecycle Abort Multipart Upload
+ * @return LifecycleAbortMultipartUpload
+ */
+ public function getAbortMultipartUpload(){
+ return $this->abortMultipartUpload;
+ }
/**
- * LifecycleRule constructor.
- *
- * @param string $id rule Id
- * @param string $prefix File prefix
- * @param string $status Rule status, which has the following valid values: [self::LIFECYCLE_STATUS_ENABLED, self::LIFECYCLE_STATUS_DISABLED]
- * @param LifecycleAction[] $actions
+ * Set Lifecycle Abort Multipart Upload
+ * @param $abortMultipartUpload LifecycleAbortMultipartUpload
*/
- public function __construct($id, $prefix, $status, $actions)
- {
- $this->id = $id;
- $this->prefix = $prefix;
- $this->status = $status;
- $this->actions = $actions;
+ public function setAbortMultipartUpload($abortMultipartUpload){
+ $this->abortMultipartUpload = $abortMultipartUpload;
+ }
+
+ /**
+ * Get Lifecycle Tag
+ * @return LifecycleTag[]
+ */
+ public function getTag(){
+ return $this->tag;
}
+ /**
+ * Set Lifecycle Tag
+ * @param $tag LifecycleTag
+ */
+ public function setTag($tag){
+ $this->tag[] = $tag;
+ }
+
+ /**
+ * Get Lifecycle Transition
+ * @return LifecycleTransition[]
+ */
+ public function getTransition(){
+ return $this->transition;
+ }
+
+ /**
+ * Set Lifecycle Transition
+ * @param $transition LifecycleTransition
+ */
+ public function setTransition($transition){
+ $this->transition[] = $transition;
+ }
+
+
+ /**
+ * Get Lifecycle Non Current Version Transition
+ * @return LifecycleNoncurrentVersionTransition[]
+ */
+ public function getNoncurrentVersionTransition(){
+ return $this->nonVersionTransition;
+ }
+
+ /**
+ * Set Lifecycle Non Current Version Transition
+ * @param $transition LifecycleNoncurrentVersionTransition
+ */
+ public function setNoncurrentVersionTransition($nonVersionTransition){
+ $this->nonVersionTransition[] = $nonVersionTransition;
+ }
+
+ /**
+ * Get Lifecycle Noncurrent Version Expiration
+ * @return LifecycleNoncurrentVersionExpiration
+ */
+ public function getNoncurrentVersionExpiration(){
+ return $this->noncurrentVersionExpiration;
+ }
+
+ /**
+ * Set Lifecycle Noncurrent Version Expiration
+ * @param $noncurrentVersionExpiration LifecycleNoncurrentVersionExpiration
+ */
+ public function setNoncurrentVersionExpiration($noncurrentVersionExpiration){
+ $this->noncurrentVersionExpiration = $noncurrentVersionExpiration;
+ }
+
+
+
/**
* @param \SimpleXMLElement $xmlRule
*/
@@ -111,16 +237,36 @@ public function appendToXml(&$xmlRule)
$xmlRule->addChild('ID', $this->id);
$xmlRule->addChild('Prefix', $this->prefix);
$xmlRule->addChild('Status', $this->status);
- foreach ($this->actions as $action) {
- $action->appendToXml($xmlRule);
+
+ if (isset($this->expiration)){
+ $this->expiration->appendToXml($xmlRule);
+
+ }
+ if (isset($this->abortMultipartUpload)){
+ $this->abortMultipartUpload->appendToXml($xmlRule);
}
- }
- private $id;
- private $prefix;
- private $status;
- private $actions = array();
+ if (isset($this->tag)){
+ foreach ($this->tag as $tag){
+ $tag->appendToXml($xmlRule);
+ }
+ }
- const LIFECYCLE_STATUS_ENABLED = 'Enabled';
- const LIFECYCLE_STATUS_DISABLED = 'Disabled';
+ if (isset($this->transition)){
+ foreach ($this->transition as $transition){
+ $transition->appendToXml($xmlRule);
+ }
+ }
+
+ if (isset($this->nonVersionTransition)){
+ foreach ($this->nonVersionTransition as $nonVersionTransition){
+ $nonVersionTransition->appendToXml($xmlRule);
+ }
+ }
+
+ if (isset($this->noncurrentVersionExpiration)){
+ $this->noncurrentVersionExpiration->appendToXml($xmlRule);
+
+ }
+ }
}
\ No newline at end of file
diff --git a/src/OSS/Model/LifecycleTag.php b/src/OSS/Model/LifecycleTag.php
new file mode 100644
index 00000000..479bbc38
--- /dev/null
+++ b/src/OSS/Model/LifecycleTag.php
@@ -0,0 +1,93 @@
+key = $key;
+ $this->value = $value;
+ }
+
+ /**
+ * Get Key
+ *
+ * @return string
+ */
+ public function getKey()
+ {
+ return $this->key;
+ }
+
+ /**
+ * Set key
+ * @param $key string
+ */
+ public function setKey($key)
+ {
+ $this->key = $key;
+ }
+
+ /**
+ * Get value
+ *
+ * @return string
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * Set value
+ * @param $value string
+ */
+ public function setValue($value)
+ {
+ $this->value = $value;
+ }
+
+ /**
+ * @param \SimpleXMLElement $xmlRule
+ */
+ public function appendToXml(&$xmlRule)
+ {
+ if(isset($this->key) || isset($this->value)){
+ $xmlTag = $xmlRule->addChild("Tag");
+ }
+
+ if (isset($this->key)){
+ $xmlTag->addChild('Key', $this->key);
+ }
+
+ if (isset($this->value)){
+ $xmlTag->addChild('Value', $this->value);
+ }
+
+
+ }
+}
\ No newline at end of file
diff --git a/src/OSS/Model/LifecycleTransition.php b/src/OSS/Model/LifecycleTransition.php
new file mode 100644
index 00000000..53d4acbe
--- /dev/null
+++ b/src/OSS/Model/LifecycleTransition.php
@@ -0,0 +1,171 @@
+days = $days;
+ $this->createdBeforeDate = $createdBeforeDate;
+ $this->storageClass = $storageClass;
+ $this->isAccessTime = $isAccessTime;
+ $this->returnToStdWhenVisit = $returnToStdWhenVisit;
+ }
+
+ /**
+ * Get Days
+ *
+ * @return int
+ */
+ public function getDays()
+ {
+ return $this->days;
+ }
+
+ /**
+ * @param $days int
+ */
+ public function setDays($days)
+ {
+ $this->days = $days;
+ }
+
+ /**
+ * Get Created Before Date
+ *
+ * @return string
+ */
+ public function getCreatedBeforeDate()
+ {
+ return $this->createdBeforeDate;
+ }
+
+ /**
+ * Set Created Before Date
+ * @param $createdBeforeDate string
+ */
+ public function setCreatedBeforeDate($createdBeforeDate)
+ {
+ $this->createdBeforeDate = $createdBeforeDate;
+ }
+
+ /**
+ * Get storageClass
+ * @return string
+ */
+ public function getStorageClass(){
+ return $this->storageClass;
+ }
+
+ /**
+ * Set storageClass
+ * @param $storageClass string
+ */
+ public function setStorageClass($storageClass){
+ $this->storageClass = $storageClass;
+ }
+
+ /**
+ * Get isAccessTime
+ * @return bool
+ */
+ public function getIsAccessTime(){
+ return $this->isAccessTime;
+ }
+
+ /**
+ * Set isAccessTime
+ * @param $isAccessTime bool
+ */
+ public function setIsAccessTime($isAccessTime){
+ $this->isAccessTime = $isAccessTime;
+ }
+
+ /**
+ * Get Return To Std When Visit
+ * @return bool
+ */
+ public function getReturnToStdWhenVisit(){
+ return $this->returnToStdWhenVisit;
+ }
+
+ /**
+ * Set Return To Std When Visit
+ * @param $returnToStdWhenVisit bool
+ */
+ public function setReturnToStdWhenVisit($returnToStdWhenVisit){
+ $this->returnToStdWhenVisit = $returnToStdWhenVisit;
+ }
+
+
+ /**
+ * @param \SimpleXMLElement $xmlRule
+ */
+ public function appendToXml(&$xmlRule)
+ {
+ if(isset($this->days) || isset($this->createdBeforeDate) || isset($this->storageClass) || isset($this->isAccessTime) || isset($this->returnToStdWhenVisit) ){
+ $xmlTransition = $xmlRule->addChild("Transition");
+ }
+
+ if (isset($this->days)){
+ $xmlTransition->addChild('Days', $this->days);
+ }
+
+ if (isset($this->createdBeforeDate)){
+ $xmlTransition->addChild('CreatedBeforeDate', $this->createdBeforeDate);
+ }
+
+ if (isset($this->storageClass)){
+ $xmlTransition->addChild('StorageClass', $this->storageClass);
+ }
+
+ if (isset($this->isAccessTime)){
+ $xmlTransition->addChild('IsAccessTime', is_bool($this->isAccessTime) ? json_encode($this->isAccessTime):$this->isAccessTime);
+ }
+
+ if (isset($this->returnToStdWhenVisit)){
+ $xmlTransition->addChild('ReturnToStdWhenVisit',is_bool($this->returnToStdWhenVisit) ? json_encode($this->returnToStdWhenVisit):$this->returnToStdWhenVisit);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/OSS/Model/RefererConfig.php b/src/OSS/Model/RefererConfig.php
index 08301439..50c3778d 100644
--- a/src/OSS/Model/RefererConfig.php
+++ b/src/OSS/Model/RefererConfig.php
@@ -20,7 +20,7 @@ public function parseFromXml($strXml)
if (!isset($xml->AllowEmptyReferer)) return;
if (!isset($xml->RefererList)) return;
$this->allowEmptyReferer =
- (strval($xml->AllowEmptyReferer) === 'TRUE' || strval($xml->AllowEmptyReferer) === 'true') ? true : false;
+ (strval($xml->AllowEmptyReferer) === '' || strval($xml->AllowEmptyReferer) === 'true') ? true : false;
foreach ($xml->RefererList->Referer as $key => $refer) {
$this->refererList[] = strval($refer);
diff --git a/src/OSS/OssClient.php b/src/OSS/OssClient.php
index c9533448..c4dd4d2a 100644
--- a/src/OSS/OssClient.php
+++ b/src/OSS/OssClient.php
@@ -9,6 +9,8 @@
use OSS\Http\RequestCore;
use OSS\Http\RequestCore_Exception;
use OSS\Http\ResponseCore;
+use OSS\Model\AccessMonitorConfig;
+use OSS\Model\BucketInfo;
use OSS\Model\CorsConfig;
use OSS\Model\CnameConfig;
use OSS\Model\LoggingConfig;
@@ -19,6 +21,7 @@
use OSS\Model\StorageCapacityConfig;
use OSS\Result\AclResult;
use OSS\Result\BodyResult;
+use OSS\Result\GetBucketAccessMonitorResult;
use OSS\Result\GetCorsResult;
use OSS\Result\GetLifecycleResult;
use OSS\Result\GetLocationResult;
@@ -1633,6 +1636,50 @@ public function getBucketTransferAcceleration($bucket,$options = NULL)
return $result->getData();
}
+ /**
+ * Put Bucket Access Monitor
+ * @param string $bucket bucket name
+ * @param string $status Enabled|Disabled
+ * @param null $options
+ * @return null
+ * @throws OssException
+ */
+ public function putBucketAccessMonitor($bucket,$status,$options = NULL)
+ {
+ $this->precheckCommon($bucket, NULL, $options, false);
+ $options[self::OSS_BUCKET] = $bucket;
+ $options[self::OSS_METHOD] = self::OSS_HTTP_PUT;
+ $options[self::OSS_OBJECT] = '/';
+ $options[self::OSS_SUB_RESOURCE] = 'accessmonitor';
+ $options[self::OSS_CONTENT_TYPE] = 'application/xml';
+ $config = new AccessMonitorConfig();
+ $config->setStatus($status);
+ $options[self::OSS_CONTENT] = $config->serializeToXml();
+ $response = $this->auth($options);
+ $result = new HeaderResult($response);
+ return $result->getData();
+ }
+
+ /**
+ * Get Bucket AccessMonitor
+ * @param string $bucket
+ * @param array|null $options
+ * @return GetBucketAccessMonitorResult
+ * @throws OssException
+ */
+ public function getBucketAccessMonitor($bucket,$options = NULL)
+ {
+ $this->precheckCommon($bucket, NULL, $options, false);
+ $options[self::OSS_BUCKET] = $bucket;
+ $options[self::OSS_METHOD] = self::OSS_HTTP_GET;
+ $options[self::OSS_OBJECT] = '/';
+ $options[self::OSS_SUB_RESOURCE] = 'accessmonitor';
+ $options[self::OSS_CONTENT_TYPE] = 'application/xml';
+ $response = $this->auth($options);
+ $result = new GetBucketAccessMonitorResult($response);
+ return $result->getData();
+ }
+
/**
* Lists the bucket's object list (in ObjectListInfo)
*
@@ -3412,8 +3459,27 @@ private function generateSignableResource($options)
$signableResource .= '/' . str_replace(array('%2F', '%25'), array('/', '%'), rawurlencode($options[self::OSS_OBJECT]));
}
if (isset($options[self::OSS_SUB_RESOURCE])) {
- $signableResource .= '?' . $options[self::OSS_SUB_RESOURCE];
+ $signableResource = $this->fliterResource($signableResource,$options[self::OSS_SUB_RESOURCE]);
+
+ }
+ return $signableResource;
+ }
+
+ /**
+ * Filter some resource
+ * @param $signableResource
+ * @param $resource
+ * @return mixed|string
+ */
+ private function fliterResource($signableResource,$resource){
+ $filterResource = array(
+ 'accessmonitor'
+ );
+
+ if (!in_array($resource,$filterResource)){
+ $signableResource .= '?' .$resource;
}
+
return $signableResource;
}
diff --git a/src/OSS/Result/GetBucketAccessMonitorResult.php b/src/OSS/Result/GetBucketAccessMonitorResult.php
new file mode 100644
index 00000000..569bf342
--- /dev/null
+++ b/src/OSS/Result/GetBucketAccessMonitorResult.php
@@ -0,0 +1,23 @@
+rawResponse->body;
+ $config = new AccessMonitorConfig();
+ $config->parseFromXml($content);
+ return $config->getStatus();
+ }
+}
diff --git a/tests/OSS/Tests/AccessMonitorConfigTest.php b/tests/OSS/Tests/AccessMonitorConfigTest.php
new file mode 100644
index 00000000..9e383625
--- /dev/null
+++ b/tests/OSS/Tests/AccessMonitorConfigTest.php
@@ -0,0 +1,57 @@
+
+
+Enabled
+
+BBBB;
+ private $validXml1 = <<
+
+Disabled
+
+BBBB;
+
+ private $invalidXml1 = <<
+
+
+BBBB;
+
+ public function testParseValidXml()
+ {
+ $accessConfig = new AccessMonitorConfig();
+ $accessConfig->parseFromXml($this->validXml);
+ $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml(strval($accessConfig)));
+ $this->assertEquals("Enabled",$accessConfig->getStatus());
+ }
+
+ public function testValidXml1()
+ {
+ $accessConfig = new AccessMonitorConfig();
+ $accessConfig->parseFromXml($this->validXml1);
+ $this->assertEquals($this->cleanXml($this->validXml1), $this->cleanXml(strval($accessConfig)));
+ $this->assertEquals("Disabled",$accessConfig->getStatus());
+ }
+
+ public function testInvalidXml1()
+ {
+ $accessConfig = new AccessMonitorConfig();
+ $accessConfig->parseFromXml($this->invalidXml1);
+ $this->assertEquals(null,$accessConfig->getStatus());
+ }
+
+ private function cleanXml($xml)
+ {
+ return str_replace("\n", "", str_replace("\r", "", $xml));
+ }
+}
diff --git a/tests/OSS/Tests/GetBucketAccessMonitorResultTest.php b/tests/OSS/Tests/GetBucketAccessMonitorResultTest.php
new file mode 100644
index 00000000..4fc76b6b
--- /dev/null
+++ b/tests/OSS/Tests/GetBucketAccessMonitorResultTest.php
@@ -0,0 +1,63 @@
+
+
+Enabled
+
+BBBB;
+ private $validXml1 = <<
+
+Disabled
+
+BBBB;
+
+ private $invalidXml2 = <<
+
+
+BBBB;
+
+ public function testParseValidXml()
+ {
+ $response = new ResponseCore(array(), $this->validXml, 200);
+ $result = new GetBucketAccessMonitorResult($response);
+ $this->assertTrue($result->isOK());
+ $this->assertNotNull($result->getData());
+ $this->assertNotNull($result->getRawResponse());
+ $status = $result->getData();
+ $this->assertEquals("Enabled", $status);
+ }
+
+ public function testParseValidXml1()
+ {
+ $response = new ResponseCore(array(), $this->validXml1, 200);
+ $result = new GetBucketAccessMonitorResult($response);
+ $this->assertTrue($result->isOK());
+ $this->assertNotNull($result->getData());
+ $this->assertNotNull($result->getRawResponse());
+ $status = $result->getData();
+ $this->assertEquals("Disabled", $status);
+ }
+
+ public function testParseInvalidXml2()
+ {
+ $response = new ResponseCore(array(), $this->invalidXml2, 200);
+ $result = new GetBucketTransferAccelerationResult($response);
+ $this->assertTrue($result->isOK());
+ $this->assertNotNull($result->getData());
+ $this->assertNotNull($result->getRawResponse());
+ $this->assertNotNull($result->getRawResponse()->body);
+ $status= $result->getData();
+ $this->assertEquals(false, $status);
+ }
+}
diff --git a/tests/OSS/Tests/GetLifecycleResultTest.php b/tests/OSS/Tests/GetLifecycleResultTest.php
index e6d9a725..d943a1fc 100644
--- a/tests/OSS/Tests/GetLifecycleResultTest.php
+++ b/tests/OSS/Tests/GetLifecycleResultTest.php
@@ -24,10 +24,35 @@ class GetLifecycleResultTest extends \PHPUnit\Framework\TestCase
temporary/
Enabled
2022-10-12T00:00:00.000Z
-2022-10-12T00:00:00.000Z
BBBB;
+ private $validXml1 = <<
+rule1logs/Enabled31rule2logs2/Enabled18030IA60Archiverule3logs3/Enabled2017-01-01T00:00:00.000Z2017-01-01T00:00:00.000Zrule4logs4/Enabledkey1val1key12val1230IArule5logs5/Enabled30IAfalserule6logs6/Enabled30IAtruefalserule7logs7/Enabled30IAtruetrue
+
+BBB;
+
+ private $inValidXml = <<
+
+
+delete obsoleted files
+obsoleted/
+Enabled
+3
+
+
+delete temporary files
+temporary/
+Enabled
+2022-10-12T00:00:00.000Z
+2022-10-12T00:00:00.000Z
+
+
+AAA;
+
+
public function testParseValidXml()
{
@@ -40,6 +65,29 @@ public function testParseValidXml()
$this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($lifecycleConfig->serializeToXml()));
}
+ public function testInValidXml()
+ {
+ $response = new ResponseCore(array(), $this->inValidXml, 200);
+ try {
+ $result = new GetLifecycleResult($response);
+ $this->assertFalse(true);
+ } catch (OssException $e) {
+ printf($e->getMessage());
+ $this->assertTrue(true);
+ }
+ }
+
+ public function testParseValidXmlOne()
+ {
+ $response = new ResponseCore(array(), $this->validXml1, 200);
+ $result = new GetLifecycleResult($response);
+ $this->assertTrue($result->isOK());
+ $this->assertNotNull($result->getData());
+ $this->assertNotNull($result->getRawResponse());
+ $lifecycleConfig = $result->getData();
+ $this->assertEquals($this->cleanXml($this->validXml1), $this->cleanXml($lifecycleConfig->serializeToXml()));
+ }
+
private function cleanXml($xml)
{
return str_replace("\n", "", str_replace("\r", "", $xml));
@@ -52,6 +100,7 @@ public function testInvalidResponse()
$result = new GetLifecycleResult($response);
$this->assertTrue(false);
} catch (OssException $e) {
+ printf($e->getMessage());
$this->assertTrue(true);
}
}
diff --git a/tests/OSS/Tests/LifecycleConfigTest.php b/tests/OSS/Tests/LifecycleConfigTest.php
index 063e4364..a1598c7a 100644
--- a/tests/OSS/Tests/LifecycleConfigTest.php
+++ b/tests/OSS/Tests/LifecycleConfigTest.php
@@ -3,31 +3,24 @@
namespace OSS\Tests;
use OSS\Core\OssException;
-use OSS\Model\LifecycleAction;
use OSS\Model\LifecycleConfig;
+use OSS\Model\LifecycleNoncurrentVersionExpiration;
use OSS\Model\LifecycleRule;
+use OSS\OssClient;
+use OSS\Model\LifecycleExpiration;
+use OSS\Model\LifecycleAbortMultipartUpload;
+use OSS\Model\LifecycleTag;
+use OSS\Model\LifecycleTransition;
+use OSS\Model\LifecycleNoncurrentVersionTransition;
class LifecycleConfigTest extends \PHPUnit\Framework\TestCase
{
- private $validLifecycle = <<
-
-
-delete obsoleted files
-obsoleted/
-Enabled
-3
-
-
-delete temporary files
-temporary/
-Enabled
-2022-10-12T00:00:00.000Z
-2022-10-12T00:00:00.000Z
-
-
-BBBB;
+rule1logs/Enabled31rule2logs2/Enabled18030IA60Archiverule3logs3/Enabled2017-01-01T00:00:00.000Z2017-01-01T00:00:00.000Zrule4logs4/Enabledkey1val1key12val1230IArule5logs5/Enabled30IAfalserule6logs6/Enabled30IAtruefalserule7logs7/Enabled30IAtruetrue
+
+BBB;
private $validLifecycle2 = <<
@@ -47,23 +40,91 @@ class LifecycleConfigTest extends \PHPUnit\Framework\TestCase
BBBB;
public function testConstructValidConfig()
- {
- $lifecycleConfig = new LifecycleConfig();
- $actions = array();
- $actions[] = new LifecycleAction("Expiration", "Days", 3);
- $lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions);
- $lifecycleConfig->addRule($lifecycleRule);
- $actions = array();
- $actions[] = new LifecycleAction("Expiration", "Date", '2022-10-12T00:00:00.000Z');
- $actions[] = new LifecycleAction("Expiration2", "Date", '2022-10-12T00:00:00.000Z');
- $lifecycleRule = new LifecycleRule("delete temporary files", "temporary/", "Enabled", $actions);
- $lifecycleConfig->addRule($lifecycleRule);
- try {
- $lifecycleConfig->addRule(null);
- $this->assertFalse(true);
- } catch (OssException $e) {
- $this->assertEquals('lifecycleRule is null', $e->getMessage());
- }
+ {$lifecycleConfig = new LifecycleConfig();
+
+ $rule1 = new LifecycleRule("rule1", "logs/", LifecycleRule::STATUS_ENANLED);
+ $lifecycleExpiration = new LifecycleExpiration();
+ $lifecycleExpiration->setDays(3);
+ $rule1->setExpiration($lifecycleExpiration);
+
+ $lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload();
+ $lifecycleAbortMultipartUpload->setDays(1);
+ $rule1->setAbortMultipartUpload($lifecycleAbortMultipartUpload);
+
+ $lifecycleConfig->addRule($rule1);
+
+ $rule2 = new LifecycleRule("rule2", "logs2/", LifecycleRule::STATUS_ENANLED);
+ $lifecycleTransition = new LifecycleTransition();
+ $lifecycleTransition->setDays(30);
+ $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA);
+ $rule2->setTransition($lifecycleTransition);
+ // 60 天 转换Object的存储类型为 Archive
+ $lifecycleTransition = new LifecycleTransition();
+ $lifecycleTransition->setDays(60);
+ $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_ARCHIVE);
+ $rule2->setTransition($lifecycleTransition);
+
+ $lifecycleExpiration = new LifecycleExpiration();
+ $lifecycleExpiration->setDays(180);
+ $rule2->setExpiration($lifecycleExpiration);
+ $lifecycleConfig->addRule($rule2);
+
+ $rule3 = new LifecycleRule("rule3", "logs3/", LifecycleRule::STATUS_ENANLED);
+ $lifecycleExpiration = new LifecycleExpiration();
+ $lifecycleExpiration->setCreatedBeforeDate("2017-01-01T00:00:00.000Z");
+ $rule3->setExpiration($lifecycleExpiration);
+
+ $lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload();
+ $lifecycleAbortMultipartUpload->setCreatedBeforeDate("2017-01-01T00:00:00.000Z");
+ $rule3->setAbortMultipartUpload($lifecycleAbortMultipartUpload);
+ $lifecycleConfig->addRule($rule3);
+
+ $rule4 = new LifecycleRule("rule4", "logs4/", LifecycleRule::STATUS_ENANLED);
+
+ $tag = new LifecycleTag();
+ $tag->setKey("key1");
+ $tag->setValue("val1");
+ $rule4->setTag($tag);
+
+ $tag2 = new LifecycleTag();
+ $tag2->setKey("key12");
+ $tag2->setValue("val12");
+ $rule4->setTag($tag2);
+ $lifecycleConfig->addRule($rule4);
+ $lifecycleTransition = new LifecycleTransition();
+ $lifecycleTransition->setDays(30);
+ $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA);
+ $rule4->setTransition($lifecycleTransition);
+
+ $rule5 = new LifecycleRule("rule5", "logs5/", LifecycleRule::STATUS_ENANLED);
+
+ $lifecycleTransition = new LifecycleTransition();
+ $lifecycleTransition->setDays(30);
+ $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA);
+ $lifecycleTransition->setIsAccessTime(false);
+ $rule5->setTransition($lifecycleTransition);
+ $lifecycleConfig->addRule($rule5);
+
+ $rule6 = new LifecycleRule("rule6", "logs6/", LifecycleRule::STATUS_ENANLED);
+
+ $lifecycleTransition = new LifecycleTransition();
+ $lifecycleTransition->setDays(30);
+ $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA);
+ $lifecycleTransition->setIsAccessTime(true);
+ $lifecycleTransition->setReturnToStdWhenVisit(false);
+ $rule6->setTransition($lifecycleTransition);
+ $lifecycleConfig->addRule($rule6);
+
+ $rule7 = new LifecycleRule("rule7", "logs7/", LifecycleRule::STATUS_ENANLED);
+
+ $nonTransition = new LifecycleNoncurrentVersionTransition();
+ $nonTransition->setNoncurrentDays(30);
+ $nonTransition->setStorageClass(OssClient::OSS_STORAGE_IA);
+ $nonTransition->setIsAccessTime(true);
+ $nonTransition->setReturnToStdWhenVisit(true);
+ $rule7->setNoncurrentVersionTransition($nonTransition);
+ $lifecycleConfig->addRule($rule7);
+
$this->assertEquals($this->cleanXml(strval($lifecycleConfig)), $this->cleanXml($this->validLifecycle));
}
@@ -72,9 +133,9 @@ public function testParseValidXml()
$lifecycleConfig = new LifecycleConfig();
$lifecycleConfig->parseFromXml($this->validLifecycle);
$this->assertEquals($this->cleanXml($lifecycleConfig->serializeToXml()), $this->cleanXml($this->validLifecycle));
- $this->assertEquals(2, count($lifecycleConfig->getRules()));
+ $this->assertEquals(7, count($lifecycleConfig->getRules()));
$rules = $lifecycleConfig->getRules();
- $this->assertEquals('delete temporary files', $rules[1]->getId());
+ $this->assertEquals('rule2', $rules[1]->getId());
}
public function testParseValidXml2()
@@ -97,11 +158,10 @@ public function testParseNullXml()
public function testLifecycleRule()
{
- $lifecycleRule = new LifecycleRule("x", "x", "x", array('x'));
+ $lifecycleRule = new LifecycleRule("x", "x", "x");
$lifecycleRule->setId("id");
$lifecycleRule->setPrefix("prefix");
$lifecycleRule->setStatus("Enabled");
- $lifecycleRule->setActions(array());
$this->assertEquals('id', $lifecycleRule->getId());
$this->assertEquals('prefix', $lifecycleRule->getPrefix());
@@ -109,18 +169,98 @@ public function testLifecycleRule()
$this->assertEmpty($lifecycleRule->getActions());
}
- public function testLifecycleAction()
+ public function testLifecycleTag()
+ {
+ $tag = new LifecycleTag('key1', 'val1');
+ $this->assertEquals($tag->getKey(), 'key1');
+ $this->assertEquals($tag->getValue(), 'val1');
+
+ $tag->setKey('v1');
+ $tag->setValue('v2');
+ $this->assertEquals($tag->getKey(), 'v1');
+ $this->assertEquals($tag->getValue(), 'v2');
+ }
+
+ public function testLifecycleTransition()
+ {
+ $transition= new LifecycleTransition(5, '2017-01-01T00:00:00.000Z',"IA",true,false);
+ $this->assertEquals($transition->getDays(), 5);
+ $this->assertEquals($transition->getCreatedBeforeDate(), '2017-01-01T00:00:00.000Z');
+ $this->assertEquals($transition->getStorageClass(), 'IA');
+ $this->assertEquals($transition->getIsAccessTime(), true);
+ $this->assertEquals($transition->getReturnToStdWhenVisit(), false);
+
+ $transition->setDays(10);
+ $transition->setCreatedBeforeDate("2022-01-01T00:00:00.000Z");
+ $transition->setStorageClass(OssClient::OSS_STORAGE_ARCHIVE);
+ $transition->setIsAccessTime(false);
+ $transition->setReturnToStdWhenVisit(false);
+
+ $this->assertEquals($transition->getDays(), 10);
+ $this->assertEquals($transition->getCreatedBeforeDate(), '2022-01-01T00:00:00.000Z');
+ $this->assertEquals($transition->getStorageClass(), OssClient::OSS_STORAGE_ARCHIVE);
+ $this->assertEquals($transition->getIsAccessTime(), false);
+ $this->assertEquals($transition->getReturnToStdWhenVisit(), false);
+ }
+
+ public function testLifecycleNonTransition()
+ {
+ $transition= new LifecycleNoncurrentVersionTransition(5, "IA",true,false);
+ $this->assertEquals($transition->getNoncurrentDays(), 5);
+ $this->assertEquals($transition->getStorageClass(), 'IA');
+ $this->assertEquals($transition->getIsAccessTime(), true);
+ $this->assertEquals($transition->getReturnToStdWhenVisit(), false);
+
+ $transition->setNoncurrentDays(10);
+ $transition->setStorageClass(OssClient::OSS_STORAGE_ARCHIVE);
+ $transition->setIsAccessTime(false);
+ $transition->setReturnToStdWhenVisit(false);
+
+ $this->assertEquals($transition->getNoncurrentDays(), 10);
+ $this->assertEquals($transition->getStorageClass(), OssClient::OSS_STORAGE_ARCHIVE);
+ $this->assertEquals($transition->getIsAccessTime(), false);
+ $this->assertEquals($transition->getReturnToStdWhenVisit(), false);
+ }
+
+ public function testLifecycleAbortMultipartUpload()
+ {
+ $abortMultipartUpload= new LifecycleAbortMultipartUpload(10, '2022-01-01T00:00:00.000Z');
+ $this->assertEquals($abortMultipartUpload->getDays(), 10);
+ $this->assertEquals($abortMultipartUpload->getCreatedBeforeDate(), '2022-01-01T00:00:00.000Z');
+
+ $abortMultipartUpload->setDays(1);
+ $abortMultipartUpload->setCreatedBeforeDate('2021-01-01T00:00:00.000Z');
+ $this->assertEquals($abortMultipartUpload->getDays(), 1);
+ $this->assertEquals($abortMultipartUpload->getCreatedBeforeDate(), '2021-01-01T00:00:00.000Z');
+ }
+
+
+ public function testLifecycleExpiration()
+ {
+ $expiration= new LifecycleExpiration(10, '2022-01-01T00:00:00.000Z',"2022-02-01T00:00:00.000Z",false);
+ $this->assertEquals($expiration->getDays(), 10);
+ $this->assertEquals($expiration->getDate(), "2022-01-01T00:00:00.000Z");
+ $this->assertEquals($expiration->getCreatedBeforeDate(), '2022-02-01T00:00:00.000Z');
+ $this->assertEquals($expiration->getExpiredObjectDeleteMarker(), false);
+
+ $expiration->setDays(1);
+ $expiration->setCreatedBeforeDate('2021-01-01T00:00:00.000Z');
+ $expiration->setDate("2021-01-02T00:00:00.000Z");
+ $expiration->setExpiredObjectDeleteMarker(true);
+
+ $this->assertEquals($expiration->getDays(), 1);
+ $this->assertEquals($expiration->getDate(), "2021-01-02T00:00:00.000Z");
+ $this->assertEquals($expiration->getCreatedBeforeDate(), '2021-01-01T00:00:00.000Z');
+ $this->assertEquals($expiration->getExpiredObjectDeleteMarker(), true);
+ }
+
+
+ public function testLifecycleNonExpiration()
{
- $action = new LifecycleAction('x', 'x', 'x');
- $this->assertEquals($action->getAction(), 'x');
- $this->assertEquals($action->getTimeSpec(), 'x');
- $this->assertEquals($action->getTimeValue(), 'x');
- $action->setAction('y');
- $action->setTimeSpec('y');
- $action->setTimeValue('y');
- $this->assertEquals($action->getAction(), 'y');
- $this->assertEquals($action->getTimeSpec(), 'y');
- $this->assertEquals($action->getTimeValue(), 'y');
+ $expiration= new LifecycleNoncurrentVersionExpiration(10, '2022-01-01T00:00:00.000Z',"2022-02-01T00:00:00.000Z",false);
+ $this->assertEquals($expiration->getNoncurrentDays(), 10);
+ $expiration->setNoncurrentDays(1);
+ $this->assertEquals($expiration->getNoncurrentDays(), 1);
}
private function cleanXml($xml)
diff --git a/tests/OSS/Tests/OssClientBucketAccessMonitorTest.php b/tests/OSS/Tests/OssClientBucketAccessMonitorTest.php
new file mode 100644
index 00000000..a6b3d63b
--- /dev/null
+++ b/tests/OSS/Tests/OssClientBucketAccessMonitorTest.php
@@ -0,0 +1,106 @@
+ossClient->getBucketAccessMonitor($this->bucket);
+ $this->assertEquals("Disabled", $status);
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+ try {
+ $this->ossClient->putBucketAccessMonitor($this->bucket, "Enabled");
+ Common::waitMetaSync();
+ $status = $this->ossClient->getBucketAccessMonitor($this->bucket);
+ $this->assertEquals("Enabled", $status);
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+ try {
+ $this->ossClient->putBucketAccessMonitor($this->bucket, "Disabled");
+ Common::waitMetaSync();
+ $status = $this->ossClient->getBucketAccessMonitor($this->bucket);
+ $this->assertEquals("Disabled", $status);
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+ }
+
+
+ public function testBucketAccessMonitorWithLifeRule(){
+ try {
+ Common::waitMetaSync();
+ $status = $this->ossClient->getBucketAccessMonitor($this->bucket);
+ $this->assertEquals("Disabled", $status);
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+ try {
+ $this->ossClient->putBucketAccessMonitor($this->bucket, "Enabled");
+ Common::waitMetaSync();
+ $status = $this->ossClient->getBucketAccessMonitor($this->bucket);
+ $this->assertEquals("Enabled", $status);
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+
+ $lifecycleConfig = new LifecycleConfig();
+
+ $rule7 = new LifecycleRule("rule7", "logs7/", LifecycleRule::STATUS_ENANLED);
+
+ $nonTransition = new LifecycleNoncurrentVersionTransition();
+ $nonTransition->setNoncurrentDays(30);
+ $nonTransition->setStorageClass(OssClient::OSS_STORAGE_IA);
+ $nonTransition->setIsAccessTime(true);
+ $nonTransition->setReturnToStdWhenVisit(true);
+ $rule7->setNoncurrentVersionTransition($nonTransition);
+ $lifecycleConfig->addRule($rule7);
+
+ try {
+ $this->ossClient->putBucketLifecycle($this->bucket, $lifecycleConfig);
+ } catch (OssException $e) {
+ print_r($e->getMessage());
+ $this->assertTrue(false);
+ }
+
+ try {
+ $this->ossClient->putBucketAccessMonitor($this->bucket, "Disabled");
+ } catch (OssException $e) {
+ $this->assertTrue(true);
+ }
+
+ try {
+ $this->ossClient->deleteBucketLifecycle($this->bucket);
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+ try {
+ $this->ossClient->putBucketAccessMonitor($this->bucket, "Disabled");
+ Common::waitMetaSync();
+ $status = $this->ossClient->getBucketAccessMonitor($this->bucket);
+ $this->assertEquals("Disabled", $status);
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+ }
+}
diff --git a/tests/OSS/Tests/OssClientBucketInfoTest.php b/tests/OSS/Tests/OssClientBucketInfoTest.php
index 759e536c..7a677ee7 100644
--- a/tests/OSS/Tests/OssClientBucketInfoTest.php
+++ b/tests/OSS/Tests/OssClientBucketInfoTest.php
@@ -11,6 +11,7 @@ public function testBucketInfo()
{
try {
$info = $this->ossClient->getBucketInfo($this->bucket);
+ $this->assertEquals("Disabled",$info->getAccessMonitor());
$this->assertEquals($this->bucket, $info->getName());
$this->assertEquals("Standard", $info->getStorageClass());
} catch (OssException $e) {
diff --git a/tests/OSS/Tests/OssClientBucketLifecycleTest.php b/tests/OSS/Tests/OssClientBucketLifecycleTest.php
index 46da1f06..6f5b9cd7 100644
--- a/tests/OSS/Tests/OssClientBucketLifecycleTest.php
+++ b/tests/OSS/Tests/OssClientBucketLifecycleTest.php
@@ -3,25 +3,32 @@
namespace OSS\Tests;
use OSS\Core\OssException;
+use OSS\Model\LifecycleAbortMultipartUpload;
use OSS\Model\LifecycleConfig;
+use OSS\Model\LifecycleExpiration;
+use OSS\Model\LifecycleNoncurrentVersionTransition;
use OSS\Model\LifecycleRule;
use OSS\Model\LifecycleAction;
+use OSS\Model\LifecycleTag;
+use OSS\Model\LifecycleTransition;
+use OSS\OssClient;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php';
class OssClientBucketLifecycleTest extends TestOssClientBase
{
- public function testBucket()
+ public function testSimpleLifeRule()
{
$lifecycleConfig = new LifecycleConfig();
- $actions = array();
- $actions[] = new LifecycleAction("Expiration", "Days", 3);
- $lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions);
+ $lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled");
+ $expiration = new LifecycleExpiration(3);
+ $lifecycleRule->setExpiration($expiration);
$lifecycleConfig->addRule($lifecycleRule);
- $actions = array();
- $actions[] = new LifecycleAction("Expiration", "Date", '2022-10-12T00:00:00.000Z');
- $lifecycleRule = new LifecycleRule("delete temporary files", "temporary/", "Enabled", $actions);
+
+ $lifecycleRule = new LifecycleRule("delete temporary files", "temporary/", "Enabled");
+ $expiration = new LifecycleExpiration(null,"2022-10-12T00:00:00.000Z");
+ $lifecycleRule->setExpiration($expiration);
$lifecycleConfig->addRule($lifecycleRule);
try {
@@ -54,4 +61,128 @@ public function testBucket()
}
}
+
+
+ public function testManyLifeRule()
+ {
+ $lifecycleConfig = new LifecycleConfig();
+
+ $rule1 = new LifecycleRule("rule1", "logs/", LifecycleRule::STATUS_ENANLED);
+ $lifecycleExpiration = new LifecycleExpiration();
+ $lifecycleExpiration->setDays(3);
+ $rule1->setExpiration($lifecycleExpiration);
+
+ $lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload();
+ $lifecycleAbortMultipartUpload->setDays(1);
+ $rule1->setAbortMultipartUpload($lifecycleAbortMultipartUpload);
+
+ $lifecycleConfig->addRule($rule1);
+
+ $rule2 = new LifecycleRule("rule2", "logs2/", LifecycleRule::STATUS_ENANLED);
+ $lifecycleTransition = new LifecycleTransition();
+ $lifecycleTransition->setDays(30);
+ $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA);
+ $rule2->setTransition($lifecycleTransition);
+ // 60 天 转换Object的存储类型为 Archive
+ $lifecycleTransition = new LifecycleTransition();
+ $lifecycleTransition->setDays(60);
+ $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_ARCHIVE);
+ $rule2->setTransition($lifecycleTransition);
+
+ $lifecycleExpiration = new LifecycleExpiration();
+ $lifecycleExpiration->setDays(180);
+ $rule2->setExpiration($lifecycleExpiration);
+ $lifecycleConfig->addRule($rule2);
+
+ $rule3 = new LifecycleRule("rule3", "logs3/", LifecycleRule::STATUS_ENANLED);
+ $lifecycleExpiration = new LifecycleExpiration();
+ $lifecycleExpiration->setCreatedBeforeDate("2017-01-01T00:00:00.000Z");
+ $rule3->setExpiration($lifecycleExpiration);
+
+ $lifecycleAbortMultipartUpload = new LifecycleAbortMultipartUpload();
+ $lifecycleAbortMultipartUpload->setCreatedBeforeDate("2017-01-01T00:00:00.000Z");
+ $rule3->setAbortMultipartUpload($lifecycleAbortMultipartUpload);
+ $lifecycleConfig->addRule($rule3);
+
+ $rule4 = new LifecycleRule("rule4", "logs4/", LifecycleRule::STATUS_ENANLED);
+
+ $tag = new LifecycleTag();
+ $tag->setKey("key1");
+ $tag->setValue("val1");
+ $rule4->setTag($tag);
+
+ $tag2 = new LifecycleTag();
+ $tag2->setKey("key12");
+ $tag2->setValue("val12");
+ $rule4->setTag($tag2);
+ $lifecycleConfig->addRule($rule4);
+ $lifecycleTransition = new LifecycleTransition();
+ $lifecycleTransition->setDays(30);
+ $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA);
+ $rule4->setTransition($lifecycleTransition);
+
+ try {
+ $this->ossClient->putBucketLifecycle($this->bucket, $lifecycleConfig);
+ } catch (OssException $e) {
+ print_r($e->getMessage());
+ $this->assertTrue(false);
+ }
+
+ try {
+ Common::waitMetaSync();
+ $lifecycleConfig2 = $this->ossClient->getBucketLifecycle($this->bucket);
+ $this->assertEquals($lifecycleConfig->serializeToXml(), $lifecycleConfig2->serializeToXml());
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+ try {
+ Common::waitMetaSync();
+ $this->ossClient->deleteBucketLifecycle($this->bucket);
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+ try {
+ Common::waitMetaSync();
+ $lifecycleConfig3 = $this->ossClient->getBucketLifecycle($this->bucket);
+ $this->assertNotEquals($lifecycleConfig->serializeToXml(), $lifecycleConfig3->serializeToXml());
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+ }
+
+ public function testLifeRuleWithAccessTime()
+ {
+ $lifecycleConfig = new LifecycleConfig();
+
+ $rule6 = new LifecycleRule("rule6", "logs6/", LifecycleRule::STATUS_ENANLED);
+
+ $lifecycleTransition = new LifecycleTransition();
+ $lifecycleTransition->setDays(30);
+ $lifecycleTransition->setStorageClass(OssClient::OSS_STORAGE_IA);
+ $lifecycleTransition->setIsAccessTime(true);
+ $lifecycleTransition->setReturnToStdWhenVisit(false);
+ $rule6->setTransition($lifecycleTransition);
+ $lifecycleConfig->addRule($rule6);
+
+ $rule7 = new LifecycleRule("rule7", "logs7/", LifecycleRule::STATUS_ENANLED);
+
+ $nonTransition = new LifecycleNoncurrentVersionTransition();
+ $nonTransition->setNoncurrentDays(30);
+ $nonTransition->setStorageClass(OssClient::OSS_STORAGE_IA);
+ $nonTransition->setIsAccessTime(true);
+ $nonTransition->setReturnToStdWhenVisit(true);
+ $rule7->setNoncurrentVersionTransition($nonTransition);
+ $lifecycleConfig->addRule($rule7);
+
+ try {
+ $this->ossClient->putBucketLifecycle($this->bucket, $lifecycleConfig);
+ } catch (OssException $e) {
+ print_r($e->getMessage());
+ $this->assertTrue(true);
+ }
+
+ }
}
diff --git a/tests/OSS/Tests/OssClientObjectTest.php b/tests/OSS/Tests/OssClientObjectTest.php
index bb610188..3c9058f4 100644
--- a/tests/OSS/Tests/OssClientObjectTest.php
+++ b/tests/OSS/Tests/OssClientObjectTest.php
@@ -620,6 +620,24 @@ public function testGetSimplifiedObjectMeta()
}
}
+ public function testGetSimplifiedObjectMetaWithAccessTime()
+ {
+ $object = "oss-php-sdk-test/upload-test-object-name.txt";
+
+ try {
+ $this->ossClient->putBucketAccessMonitor($this->bucket, "Enabled");
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+ try {
+ $objectMeta = $this->ossClient->getSimplifiedObjectMeta($this->bucket, $object);
+ $this->assertEquals(true, array_key_exists(strtolower('x-oss-last-access-time'), $objectMeta));
+ } catch (OssException $e) {
+ $this->assertFalse(false);
+ }
+ }
+
public function testUploadStream()
{
$object = "oss-php-sdk-test/put-from-stream.txt";