Explorar o código

add asyn fetch task sdk

taowei.wtw %!s(int64=5) %!d(string=hai) anos
pai
achega
619e925fc0
Modificáronse 5 ficheiros con 142 adicións e 2 borrados
  1. 60 0
      oss/client.go
  2. 39 0
      oss/client_test.go
  3. 1 1
      oss/conn.go
  4. 3 1
      oss/const.go
  5. 39 0
      oss/type.go

+ 60 - 0
oss/client.go

@@ -1343,6 +1343,66 @@ func (client Client) DeleteBucketInventory(bucketName, strInventoryId string, op
 	return CheckRespCode(resp.StatusCode, []int{http.StatusNoContent})
 }
 
+// SetBucketAsyncTask API operation for set async fetch task
+//
+// bucketName tht bucket name.
+//
+// asynConf  configruation
+//
+// error  it's nil if success, otherwise it's an error.
+func (client Client) SetBucketAsyncTask(bucketName string, asynConf AsyncFetchTaskConfiguration, options ...Option) (AsyncFetchTaskResult, error) {
+	var out AsyncFetchTaskResult
+	params := map[string]interface{}{}
+	params["asyncFetch"] = nil
+
+	var bs []byte
+	bs, err := xml.Marshal(asynConf)
+
+	if err != nil {
+		return out, err
+	}
+
+	buffer := new(bytes.Buffer)
+	buffer.Write(bs)
+
+	contentType := http.DetectContentType(buffer.Bytes())
+	headers := make(map[string]string)
+	headers[HTTPHeaderContentType] = contentType
+
+	resp, err := client.do("POST", bucketName, params, headers, buffer, options...)
+
+	if err != nil {
+		return out, err
+	}
+
+	defer resp.Body.Close()
+	err = xmlUnmarshal(resp.Body, &out)
+	return out, err
+}
+
+// GetBucketAsyncTask API operation for set async fetch task
+//
+// bucketName tht bucket name.
+//
+// taskid  returned by SetBucketAsyncTask
+//
+// error  it's nil if success, otherwise it's an error.
+func (client Client) GetBucketAsyncTask(bucketName string, taskID string, options ...Option) (AsynFetchTaskInfo, error) {
+	var out AsynFetchTaskInfo
+	params := map[string]interface{}{}
+	params["asyncFetch"] = nil
+
+	headers := make(map[string]string)
+	headers[HTTPHeaderOssTaskID] = taskID
+	resp, err := client.do("GET", bucketName, params, headers, nil, options...)
+	if err != nil {
+		return out, err
+	}
+	defer resp.Body.Close()
+	err = xmlUnmarshal(resp.Body, &out)
+	return out, err
+}
+
 // SecurityToken sets the temporary user's SecurityToken.
 //
 // token    STS token

+ 39 - 0
oss/client_test.go

@@ -3307,3 +3307,42 @@ func (s *OssClientSuite) TestBucketInventoryNegative(c *C) {
 	err = client.DeleteBucket(bucketName)
 	c.Assert(err, IsNil)
 }
+
+func (s *OssClientSuite) TestBucketAsyncTask(c *C) {
+	client, err := New(endpoint, accessID, accessKey)
+	c.Assert(err, IsNil)
+
+	bucketName := bucketNamePrefix + RandLowStr(5)
+	err = client.CreateBucket(bucketName)
+	c.Assert(err, IsNil)
+
+	objectName := objectNamePrefix + RandLowStr(6)
+
+	// set asyn task
+	asynConf := AsyncFetchTaskConfiguration{
+		Url:           "http://www.baidu.com",
+		Object:        objectName,
+		Host:          "",
+		ContentMD5:    "",
+		Callback:      "",
+		StorageClass:  "",
+		IgnoreSameKey: true,
+	}
+
+	asynResult, err := client.SetBucketAsyncTask(bucketName, asynConf)
+	c.Assert(err, IsNil)
+	c.Assert(len(asynResult.TaskId) > 0, Equals, true)
+
+	// get asyn task
+	asynTask, err := client.GetBucketAsyncTask(bucketName, asynResult.TaskId)
+	c.Assert(err, IsNil)
+	c.Assert(asynResult.TaskId, Equals, asynTask.TaskId)
+	c.Assert(len(asynTask.State) > 0, Equals, true)
+	c.Assert(asynConf.Url, Equals, asynTask.TaskInfo.Url)
+	c.Assert(asynConf.Object, Equals, asynTask.TaskInfo.Object)
+	c.Assert(asynConf.Callback, Equals, asynTask.TaskInfo.Callback)
+	c.Assert(asynConf.IgnoreSameKey, Equals, asynTask.TaskInfo.IgnoreSameKey)
+
+	err = client.DeleteBucket(bucketName)
+	c.Assert(err, IsNil)
+}

+ 1 - 1
oss/conn.go

@@ -44,7 +44,7 @@ var signKeyList = []string{"acl", "uploads", "location", "cors",
 	"udfApplicationLog", "restore", "callback", "callback-var", "qosInfo",
 	"policy", "stat", "encryption", "versions", "versioning", "versionId", "requestPayment",
 	"x-oss-request-payer", "sequential",
-	"inventory", "inventoryId", "continuation-token"}
+	"inventory", "inventoryId", "continuation-token", "asyncFetch"}
 
 // init initializes Conn
 func (conn *Conn) init(config *Config, urlMaker *urlMaker, client *http.Client) error {

+ 3 - 1
oss/const.go

@@ -167,6 +167,7 @@ const (
 	HTTPHeaderOssSecurityToken               = "X-Oss-Security-Token"
 	HTTPHeaderOssServerSideEncryption        = "X-Oss-Server-Side-Encryption"
 	HTTPHeaderOssServerSideEncryptionKeyID   = "X-Oss-Server-Side-Encryption-Key-Id"
+	HTTPHeaderOssServerSideDataEncryption    = "X-Oss-Server-Side-Data-Encryption"
 	HTTPHeaderOssCopySource                  = "X-Oss-Copy-Source"
 	HTTPHeaderOssCopySourceRange             = "X-Oss-Copy-Source-Range"
 	HTTPHeaderOssCopySourceIfMatch           = "X-Oss-Copy-Source-If-Match"
@@ -187,6 +188,7 @@ const (
 	HTTPHeaderOssTrafficLimit                = "X-Oss-Traffic-Limit"
 	HTTPHeaderOssForbidOverWrite             = "X-Oss-Forbid-Overwrite"
 	HTTPHeaderOssRangeBehavior               = "X-Oss-Range-Behavior"
+	HTTPHeaderOssTaskID                      = "X-Oss-Task-Id"
 )
 
 // HTTP Param
@@ -218,7 +220,7 @@ const (
 
 	NullVersion = "null"
 
-	Version = "v2.1.0" // Go SDK version
+	Version = "v2.1.1" // Go SDK version
 )
 
 // FrameType

+ 39 - 0
oss/type.go

@@ -1134,3 +1134,42 @@ type RestoreConfiguration struct {
 	Days    int32    `xml:"Days,omitempty"`
 	Tier    string   `xml:"JobParameters>Tier,omitempty"`
 }
+
+// AsyncFetchTaskConfiguration for SetBucketAsyncFetchTask
+type AsyncFetchTaskConfiguration struct {
+	XMLName       xml.Name `xml:"AsyncFetchTaskConfiguration"`
+	Url           string   `xml:"Url,omitempty"`
+	Object        string   `xml:"Object,omitempty"`
+	Host          string   `xml:"Host,omitempty"`
+	ContentMD5    string   `xml:"ContentMD5,omitempty"`
+	Callback      string   `xml:"Callback,omitempty"`
+	StorageClass  string   `xml:"StorageClass,omitempty"`
+	IgnoreSameKey bool     `xml:"IgnoreSameKey,omitempty"`
+}
+
+// AsyncFetchTaskResult for SetBucketAsyncFetchTask result
+type AsyncFetchTaskResult struct {
+	XMLName xml.Name `xml:"AsyncFetchTaskResult"`
+	TaskId  string   `xml:"TaskId,omitempty"`
+}
+
+// AsynFetchTaskInfo for GetBucketAsyncFetchTask result
+type AsynFetchTaskInfo struct {
+	XMLName  xml.Name      `xml:"AsyncFetchTaskInfo"`
+	TaskId   string        `xml:"TaskId,omitempty"`
+	State    string        `xml:"State,omitempty"`
+	ErrorMsg string        `xml:"ErrorMsg,omitempty"`
+	TaskInfo AsyncTaskInfo `xml:"TaskInfo,omitempty"`
+}
+
+// AsyncTaskInfo for async task information
+type AsyncTaskInfo struct {
+	XMLName       xml.Name `xml:"TaskInfo"`
+	Url           string   `xml:"Url,omitempty"`
+	Object        string   `xml:"Object,omitempty"`
+	Host          string   `xml:"Host,omitempty"`
+	ContentMD5    string   `xml:"ContentMD5,omitempty"`
+	Callback      string   `xml:"Callback,omitempty"`
+	StorageClass  string   `xml:"StorageClass,omitempty"`
+	IgnoreSameKey bool     `xml:"IgnoreSameKey,omitempty"`
+}