taowei.wtw 6 лет назад
Родитель
Сommit
2f534f2c15
5 измененных файлов с 136 добавлено и 1 удалено
  1. 66 0
      oss/client.go
  2. 58 0
      oss/client_test.go
  3. 1 1
      oss/const.go
  4. 10 0
      oss/option.go
  5. 1 0
      oss/type.go

+ 66 - 0
oss/client.go

@@ -729,6 +729,72 @@ func (client Client) DeleteBucketEncryption(bucketName string) error {
 	return checkRespCode(resp.StatusCode, []int{http.StatusNoContent})
 	return checkRespCode(resp.StatusCode, []int{http.StatusNoContent})
 }
 }
 
 
+//
+// SetBucketTagging add tagging to bucket
+// bucketName  name of bucket
+// tagging    tagging to be added
+// error        nil if success, otherwise error
+func (client Client) SetBucketTagging(bucketName string, tagging Tagging) error {
+	var err error
+	var bs []byte
+	bs, err = xml.Marshal(tagging)
+
+	if err != nil {
+		return err
+	}
+
+	buffer := new(bytes.Buffer)
+	buffer.Write(bs)
+
+	contentType := http.DetectContentType(buffer.Bytes())
+	headers := map[string]string{}
+	headers[HTTPHeaderContentType] = contentType
+
+	params := map[string]interface{}{}
+	params["tagging"] = nil
+	resp, err := client.do("PUT", bucketName, params, headers, buffer)
+	if err != nil {
+		return err
+	}
+	defer resp.Body.Close()
+	return checkRespCode(resp.StatusCode, []int{http.StatusOK})
+}
+
+// GetBucketTagging get tagging of the bucket
+// bucketName  name of bucket
+// error      nil if success, otherwise error
+func (client Client) GetBucketTagging(bucketName string) (GetBucketTaggingResult, error) {
+	var out GetBucketTaggingResult
+	params := map[string]interface{}{}
+	params["tagging"] = nil
+	resp, err := client.do("GET", bucketName, params, nil, nil)
+
+	if err != nil {
+		return out, err
+	}
+	defer resp.Body.Close()
+
+	err = xmlUnmarshal(resp.Body, &out)
+	return out, err
+}
+
+//
+// DeleteBucketTagging delete bucket tagging
+// bucketName  name of bucket
+// error      nil if success, otherwise error
+//
+func (client Client) DeleteBucketTagging(bucketName string) error {
+	params := map[string]interface{}{}
+	params["tagging"] = nil
+	resp, err := client.do("DELETE", bucketName, params, nil, nil)
+
+	if err != nil {
+		return err
+	}
+	defer resp.Body.Close()
+	return checkRespCode(resp.StatusCode, []int{http.StatusNoContent})
+}
+
 // GetBucketStat get bucket stat
 // GetBucketStat get bucket stat
 // bucketName    the bucket name.
 // bucketName    the bucket name.
 // error    it's nil if no error, otherwise it's an error object.
 // error    it's nil if no error, otherwise it's an error object.

+ 58 - 0
oss/client_test.go

@@ -1991,6 +1991,64 @@ func (s *OssClientSuite) TestBucketEncyptionPutObjectError(c *C) {
 	c.Assert(err, IsNil)
 	c.Assert(err, IsNil)
 }
 }
 
 
+func (s *OssClientSuite) TestBucketTaggingOperation(c *C) {
+	client, err := New(endpoint, accessID, accessKey)
+	c.Assert(err, IsNil)
+
+	bucketName := bucketNamePrefix + randLowStr(5)
+	err = client.CreateBucket(bucketName)
+	c.Assert(err, IsNil)
+
+	// Bucket Tagging
+	var tagging Tagging
+	tagging.Tags = []Tag{Tag{Key: "testkey2", Value: "testvalue2"}}
+	err = client.SetBucketTagging(bucketName, tagging)
+	c.Assert(err, IsNil)
+
+	getResult, err := client.GetBucketTagging(bucketName)
+	c.Assert(err, IsNil)
+	c.Assert(getResult.Tags[0].Key, Equals, tagging.Tags[0].Key)
+	c.Assert(getResult.Tags[0].Value, Equals, tagging.Tags[0].Value)
+
+	// delete BucketTagging
+	err = client.DeleteBucketTagging(bucketName)
+	c.Assert(err, IsNil)
+	getResult, err = client.GetBucketTagging(bucketName)
+	c.Assert(err, IsNil)
+	c.Assert(len(getResult.Tags), Equals, 0)
+
+	err = client.DeleteBucket(bucketName)
+	c.Assert(err, IsNil)
+}
+
+func (s *OssClientSuite) TestListBucketsTagging(c *C) {
+	client, err := New(endpoint, accessID, accessKey)
+	c.Assert(err, IsNil)
+
+	bucketName1 := bucketNamePrefix + randLowStr(5)
+	err = client.CreateBucket(bucketName1)
+	c.Assert(err, IsNil)
+
+	bucketName2 := bucketNamePrefix + randLowStr(5)
+	err = client.CreateBucket(bucketName2)
+	c.Assert(err, IsNil)
+
+	// Bucket Tagging
+	var tagging Tagging
+	tagging.Tags = []Tag{Tag{Key: "testkey", Value: "testvalue"}}
+	err = client.SetBucketTagging(bucketName1, tagging)
+	c.Assert(err, IsNil)
+
+	// list bucket
+	listResult, err := client.ListBuckets(TagKey("testkey"))
+	c.Assert(err, IsNil)
+	c.Assert(len(listResult.Buckets), Equals, 1)
+	c.Assert(listResult.Buckets[0].Name, Equals, bucketName1)
+
+	client.DeleteBucket(bucketName1)
+	client.DeleteBucket(bucketName2)
+}
+
 func (s *OssClientSuite) TestGetBucketStat(c *C) {
 func (s *OssClientSuite) TestGetBucketStat(c *C) {
 	client, err := New(endpoint, accessID, accessKey)
 	client, err := New(endpoint, accessID, accessKey)
 	c.Assert(err, IsNil)
 	c.Assert(err, IsNil)

+ 1 - 1
oss/const.go

@@ -163,5 +163,5 @@ const (
 
 
 	CheckpointFileSuffix = ".cp" // Checkpoint file suffix
 	CheckpointFileSuffix = ".cp" // Checkpoint file suffix
 
 
-	Version = "v1.9.7" // Go SDK version
+	Version = "v1.9.8" // Go SDK version
 )
 )

+ 10 - 0
oss/option.go

@@ -259,6 +259,16 @@ func KeyMarker(value string) Option {
 	return addParam("key-marker", value)
 	return addParam("key-marker", value)
 }
 }
 
 
+// TagKey is an option to set tag key parameter
+func TagKey(value string) Option {
+	return addParam("tag-key", value)
+}
+
+// TagValue is an option to set tag value parameter
+func TagValue(value string) Option {
+	return addParam("tag-value", value)
+}
+
 // UploadIDMarker is an option to set upload-id-marker parameter
 // UploadIDMarker is an option to set upload-id-marker parameter
 func UploadIDMarker(value string) Option {
 func UploadIDMarker(value string) Option {
 	return addParam("upload-id-marker", value)
 	return addParam("upload-id-marker", value)

+ 1 - 0
oss/type.go

@@ -631,6 +631,7 @@ type SSEDefaultRule struct {
 }
 }
 
 
 type GetBucketEncryptionResult ServerEncryptionRule
 type GetBucketEncryptionResult ServerEncryptionRule
+type GetBucketTaggingResult Tagging
 
 
 type BucketStat struct {
 type BucketStat struct {
 	XMLName              xml.Name `xml:"BucketStat"`
 	XMLName              xml.Name `xml:"BucketStat"`