Bläddra i källkod

fix return value of ProcessObject

hangzws 7 år sedan
förälder
incheckning
6b5803454d
5 ändrade filer med 38 tillägg och 6 borttagningar
  1. 6 3
      oss/bucket.go
  2. 7 3
      oss/bucket_test.go
  3. 9 0
      oss/conn.go
  4. 8 0
      oss/conn_test.go
  5. 8 0
      oss/type.go

+ 6 - 3
oss/bucket.go

@@ -911,17 +911,20 @@ func (bucket Bucket) DoGetObjectWithURL(signedURL string, options []Option) (*Ge
 //
 // error    it's nil if no error, otherwise it's an error object.
 //
-func (bucket Bucket) ProcessObject(objectKey string, process string) error {
+func (bucket Bucket) ProcessObject(objectKey string, process string) (ProcessObjectResut, error) {
+	var out ProcessObjectResut
 	params := map[string]interface{}{}
 	params["x-oss-process"] = nil
 	processData := fmt.Sprintf("%v=%v", "x-oss-process", process)
 	data := strings.NewReader(processData)
 	resp, err := bucket.do("POST", objectKey, params, nil, data, nil)
 	if err != nil {
-		return err
+		return out, err
 	}
 	defer resp.Body.Close()
-	return checkRespCode(resp.StatusCode, []int{http.StatusOK})
+
+	err = jsonUnmarshal(resp.Body, &out)
+	return out, err
 }
 
 // Private

+ 7 - 3
oss/bucket_test.go

@@ -2077,21 +2077,25 @@ func (s *OssBucketSuite) TestProcessObject(c *C) {
 	// If bucket-name not specified, it is saved to the current bucket by default.
 	destObjName := objectNamePrefix + "_process_dest_1.jpg"
 	process := fmt.Sprintf("image/resize,w_100|sys/saveas,o_%v", base64.URLEncoding.EncodeToString([]byte(destObjName)))
-	err = s.bucket.ProcessObject(objectName, process)
+	result, err := s.bucket.ProcessObject(objectName, process)
 	c.Assert(err, IsNil)
 	exist, _ := s.bucket.IsObjectExist(destObjName)
 	c.Assert(exist, Equals, true)
+	c.Assert(result.Bucket, Equals, "")
+	c.Assert(result.Object, Equals, destObjName)
 
 	destObjName = objectNamePrefix + "_process_dest_1.jpg"
 	process = fmt.Sprintf("image/resize,w_100|sys/saveas,o_%v,b_%v", base64.URLEncoding.EncodeToString([]byte(destObjName)), base64.URLEncoding.EncodeToString([]byte(s.bucket.BucketName)))
-	err = s.bucket.ProcessObject(objectName, process)
+	result, err = s.bucket.ProcessObject(objectName, process)
 	c.Assert(err, IsNil)
 	exist, _ = s.bucket.IsObjectExist(destObjName)
 	c.Assert(exist, Equals, true)
+	c.Assert(result.Bucket, Equals, s.bucket.BucketName)
+	c.Assert(result.Object, Equals, destObjName)
 
 	//no support process
 	process = fmt.Sprintf("image/resize,w_100|saveas,o_%v,b_%v", base64.URLEncoding.EncodeToString([]byte(destObjName)), base64.URLEncoding.EncodeToString([]byte(s.bucket.BucketName)))
-	err = s.bucket.ProcessObject(objectName, process)
+	result, err = s.bucket.ProcessObject(objectName, process)
 	c.Assert(err, NotNil)
 }
 

+ 9 - 0
oss/conn.go

@@ -4,6 +4,7 @@ import (
 	"bytes"
 	"crypto/md5"
 	"encoding/base64"
+	"encoding/json"
 	"encoding/xml"
 	"fmt"
 	"hash"
@@ -440,6 +441,14 @@ func xmlUnmarshal(body io.Reader, v interface{}) error {
 	return xml.Unmarshal(data, v)
 }
 
+func jsonUnmarshal(body io.Reader, v interface{}) error {
+	data, err := ioutil.ReadAll(body)
+	if err != nil {
+		return err
+	}
+	return json.Unmarshal(data, v)
+}
+
 // timeoutConn handles HTTP timeout
 type timeoutConn struct {
 	conn        net.Conn

+ 8 - 0
oss/conn_test.go

@@ -2,6 +2,7 @@ package oss
 
 import (
 	"net/http"
+	"os"
 
 	. "gopkg.in/check.v1"
 )
@@ -133,4 +134,11 @@ func (s *OssConnSuite) TestConnToolFunc(c *C) {
 	unexpect := UnexpectedStatusCodeError{[]int{200}, 202}
 	c.Assert(len(unexpect.Error()) > 0, Equals, true)
 	c.Assert(unexpect.Got(), Equals, 202)
+
+	fd, err := os.Open("../sample/BingWallpaper-2015-11-07.jpg")
+	c.Assert(err, IsNil)
+	fd.Close()
+	var out ProcessObjectResut
+	err = jsonUnmarshal(fd, &out)
+	c.Assert(err, NotNil)
 }

+ 8 - 0
oss/type.go

@@ -363,6 +363,14 @@ type UncompletedUpload struct {
 	Initiated time.Time `xml:"Initiated"` // Initialization time in the format such as 2012-02-23T04:18:23.000Z
 }
 
+// ProcessObjectResut defines result object of ProcessObject
+type ProcessObjectResut struct {
+	Bucket   string `json:"bucket"`
+	FileSize int    `json:"fileSize"`
+	Object   string `json:"object"`
+	Status   string `json:"status"`
+}
+
 // decodeDeleteObjectsResult decodes deleting objects result in URL encoding
 func decodeDeleteObjectsResult(result *DeleteObjectsResult) error {
 	var err error