Browse Source

add RestoreObjectXML

taowei.wtw 5 years ago
parent
commit
880ba13b4c
3 changed files with 49 additions and 6 deletions
  1. 19 0
      oss/bucket.go
  2. 24 0
      oss/bucket_test.go
  3. 6 6
      oss/client_test.go

+ 19 - 0
oss/bucket.go

@@ -869,6 +869,25 @@ func (bucket Bucket) RestoreObjectDetail(objectKey string, restoreConfig Restore
 	return CheckRespCode(resp.StatusCode, []int{http.StatusOK, http.StatusAccepted})
 }
 
+// RestoreObjectXML support more features than RestoreObject
+func (bucket Bucket) RestoreObjectXML(objectKey, configXML string, options ...Option) error {
+	buffer := new(bytes.Buffer)
+	buffer.Write([]byte(configXML))
+
+	contentType := http.DetectContentType(buffer.Bytes())
+	options = append(options, ContentType(contentType))
+
+	params, _ := GetRawParams(options)
+	params["restore"] = nil
+
+	resp, err := bucket.do("POST", objectKey, params, options, buffer, nil)
+	if err != nil {
+		return err
+	}
+	defer resp.Body.Close()
+	return CheckRespCode(resp.StatusCode, []int{http.StatusOK, http.StatusAccepted})
+}
+
 // SignURL signs the URL. Users could access the object directly with this URL without getting the AK.
 //
 // objectKey    the target object to sign.

+ 24 - 0
oss/bucket_test.go

@@ -2375,6 +2375,30 @@ func (s *OssBucketSuite) TestRestoreObjectWithConfig(c *C) {
 	ForceDeleteBucket(client, bucketName, c)
 }
 
+// TestRestoreObjectWithXml
+func (s *OssBucketSuite) TestRestoreObjectWithXml(c *C) {
+	// create a bucket with default proprety
+	client, err := New(endpoint, accessID, accessKey)
+	c.Assert(err, IsNil)
+
+	bucketName := bucketNamePrefix + RandLowStr(6)
+	err = client.CreateBucket(bucketName, StorageClass(StorageArchive))
+	c.Assert(err, IsNil)
+
+	bucket, err := client.Bucket(bucketName)
+	objectName := objectNamePrefix + RandStr(8)
+
+	// Put object
+	err = bucket.PutObject(objectName, strings.NewReader("123456789"), ObjectStorageClass(StorageArchive))
+	c.Assert(err, IsNil)
+
+	xmlConfig := `<RestoreRequest><Days>7</Days></RestoreRequest>`
+
+	err = bucket.RestoreObjectXML(objectName, xmlConfig)
+	c.Assert(err, IsNil)
+	ForceDeleteBucket(client, bucketName, c)
+}
+
 // TestProcessObject
 func (s *OssBucketSuite) TestProcessObject(c *C) {
 	objectName := objectNamePrefix + RandStr(8) + ".jpg"

+ 6 - 6
oss/client_test.go

@@ -1073,16 +1073,16 @@ func (s *OssClientSuite) TestSetBucketLifecycleAboutVersionObjectNew(c *C) {
 	}
 
 	versionExpiration := LifecycleVersionExpiration{
-		NoncurrentDays: 20,
+		NoncurrentDays: 40,
 	}
 
 	versionTransition1 := LifecycleVersionTransition{
-		NoncurrentDays: 10,
+		NoncurrentDays: 25,
 		StorageClass:   "IA",
 	}
 
 	versionTransition2 := LifecycleVersionTransition{
-		NoncurrentDays: 20,
+		NoncurrentDays: 30,
 		StorageClass:   "ColdArchive",
 	}
 
@@ -1105,10 +1105,10 @@ func (s *OssClientSuite) TestSetBucketLifecycleAboutVersionObjectNew(c *C) {
 	c.Assert(res.Rules[0].Expiration.Date, Equals, "")
 	c.Assert(*(res.Rules[0].Expiration.ExpiredObjectDeleteMarker), Equals, true)
 
-	c.Assert(res.Rules[0].NonVersionExpiration.NoncurrentDays, Equals, 20)
-	c.Assert(res.Rules[0].NonVersionTransition.NoncurrentDays, Equals, 10)
+	c.Assert(res.Rules[0].NonVersionExpiration.NoncurrentDays, Equals, 40)
+	c.Assert(res.Rules[0].NonVersionTransition.NoncurrentDays, Equals, 25)
 	c.Assert(res.Rules[0].NonVersionTransition.StorageClass, Equals, StorageClassType("IA"))
-	c.Assert(len(res.Rules[0].NonVersionTransitions),Equals, 2)
+	c.Assert(len(res.Rules[0].NonVersionTransitions), Equals, 2)
 
 	err = client.DeleteBucket(bucketNameTest)
 	c.Assert(err, IsNil)