فهرست منبع

add param sequential for InitiateMultipartUpload

taowei.wtw 6 سال پیش
والد
کامیت
143294b4db
4فایلهای تغییر یافته به همراه52 افزوده شده و 2 حذف شده
  1. 1 1
      oss/conn.go
  2. 7 1
      oss/multipart.go
  3. 5 0
      oss/option.go
  4. 39 0
      oss/upload_test.go

+ 1 - 1
oss/conn.go

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

+ 7 - 1
oss/multipart.go

@@ -24,8 +24,14 @@ import (
 func (bucket Bucket) InitiateMultipartUpload(objectKey string, options ...Option) (InitiateMultipartUploadResult, error) {
 	var imur InitiateMultipartUploadResult
 	opts := addContentType(options, objectKey)
-	params := map[string]interface{}{}
+	params, _ := getRawParams(options)
+	_, ok := params["sequential"]
+	if ok {
+		// convert "" to nil
+		params["sequential"] = nil
+	}
 	params["uploads"] = nil
+
 	resp, err := bucket.do("POST", objectKey, params, opts, nil, nil)
 	if err != nil {
 		return imur, err

+ 5 - 0
oss/option.go

@@ -330,6 +330,11 @@ func PartNumberMarker(value int) Option {
 	return addParam("part-number-marker", strconv.Itoa(value))
 }
 
+// Sequential is an option to set sequential parameter for InitiateMultipartUpload
+func Sequential() Option {
+	return addParam("sequential", "")
+}
+
 // DeleteObjectsQuiet false:DeleteObjects in verbose mode; true:DeleteObjects in quite mode. Default is false.
 func DeleteObjectsQuiet(isQuiet bool) Option {
 	return addArg(deleteObjectsQuiet, isQuiet)

+ 39 - 0
oss/upload_test.go

@@ -698,3 +698,42 @@ func (s *OssUploadSuite) TestUploadFileWithForbidOverWrite(c *C) {
 
 	forceDeleteBucket(client, bucketName, c)
 }
+
+// TestUploadFileWithSequential
+func (s *OssUploadSuite) TestUploadFileWithSequential(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)
+	c.Assert(err, IsNil)
+	bucket, err := client.Bucket(bucketName)
+
+	fileName := "../sample/BingWallpaper-2015-11-07.jpg"
+	fileInfo, err := os.Stat(fileName)
+	c.Assert(err, IsNil)
+
+	objectName := objectNamePrefix + randStr(8)
+
+	var respHeader http.Header
+
+	// UploadFile with properties
+	options := []Option{
+		Sequential(),
+		GetResponseHeader(&respHeader),
+		Checkpoint(true, fileName+".cp"),
+	}
+
+	// Updating the file
+	err = bucket.UploadFile(objectName, fileName, fileInfo.Size()/2, options...)
+	c.Assert(err, IsNil)
+
+	respHeader, err = bucket.GetObjectDetailedMeta(objectName)
+	c.Assert(err, IsNil)
+
+	strMD5 := respHeader.Get("Content-MD5")
+	c.Assert(len(strMD5) > 0, Equals, true)
+
+	forceDeleteBucket(client, bucketName, c)
+}