Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions oss/bucket_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5318,6 +5318,60 @@ func (s *OssBucketSuite) TestVersioningCompleteMultipartUpload(c *C) {
ForceDeleteBucket(client, bucketName, c)
}

func (s *OssBucketSuite) TestCompleteMultipartUploadWithCompleteAll(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)

objectName := objectNamePrefix + RandStr(8)
var fileName = "test-file-" + RandStr(8)
content := RandStr(500 * 1024)
CreateFile(fileName, content, c)

chunks, err := SplitFileByPartNum(fileName, 3)
c.Assert(err, IsNil)

options := []Option{
Expires(futureDate), Meta("my", "myprop"),
}

fd, err := os.Open(fileName)
c.Assert(err, IsNil)
defer fd.Close()

imur, err := bucket.InitiateMultipartUpload(objectName, options...)
c.Assert(err, IsNil)
var parts []UploadPart
for _, chunk := range chunks {
fd.Seek(chunk.Offset, os.SEEK_SET)
part, err := bucket.UploadPart(imur, fd, chunk.Size, chunk.Number)
c.Assert(err, IsNil)
parts = append(parts, part)
}

var respHeader http.Header
_, err = bucket.CompleteMultipartUpload(imur, parts, GetResponseHeader(&respHeader), CompleteAll("yes"))
c.Assert(err, NotNil)

_, err = bucket.CompleteMultipartUpload(imur, nil, GetResponseHeader(&respHeader), CompleteAll("yes"))
c.Assert(err, IsNil)

meta, err := bucket.GetObjectDetailedMeta(objectName)
c.Assert(err, IsNil)
c.Assert(meta.Get("X-Oss-Meta-My"), Equals, "myprop")
c.Assert(meta.Get("Expires"), Equals, futureDate.Format(http.TimeFormat))
c.Assert(meta.Get("X-Oss-Object-Type"), Equals, "Multipart")
os.Remove(fileName)
bucket.DeleteObject(objectName)
ForceDeleteBucket(client, bucketName, c)
}

func (s *OssBucketSuite) TestVersioningUploadPartCopy(c *C) {
// create a bucket with default proprety
client, err := New(endpoint, accessID, accessKey)
Expand Down
1 change: 1 addition & 0 deletions oss/const.go
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,7 @@ const (
HttpHeaderOssNotification = "X-Oss-Notification"
HTTPHeaderOssEc = "X-Oss-Ec"
HTTPHeaderOssErr = "X-Oss-Err"
HTTPHeaderOssCompleteAll = "X-Oss-Complete-All"
)

// HTTP Param
Expand Down
20 changes: 10 additions & 10 deletions oss/multipart.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,17 +197,17 @@ func (bucket Bucket) UploadPartCopy(imur InitiateMultipartUploadResult, srcBucke
func (bucket Bucket) CompleteMultipartUpload(imur InitiateMultipartUploadResult,
parts []UploadPart, options ...Option) (CompleteMultipartUploadResult, error) {
var out CompleteMultipartUploadResult

sort.Sort(UploadParts(parts))
cxml := completeMultipartUploadXML{}
cxml.Part = parts
bs, err := xml.Marshal(cxml)
if err != nil {
return out, err
}
buffer := new(bytes.Buffer)
buffer.Write(bs)

if len(parts) > 0 {
sort.Sort(UploadParts(parts))
cxml := completeMultipartUploadXML{}
cxml.Part = parts
bs, err := xml.Marshal(cxml)
if err != nil {
return out, err
}
buffer.Write(bs)
}
params := map[string]interface{}{}
params["uploadId"] = imur.UploadID
resp, err := bucket.do("POST", imur.Key, params, options, buffer, nil)
Expand Down
5 changes: 5 additions & 0 deletions oss/option.go
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,11 @@ func RequestPayer(payerType PayerType) Option {
return setHeader(HTTPHeaderOssRequester, strings.ToLower(string(payerType)))
}

// CompleteAll is an option to set X-Oss-Complete-All header
func CompleteAll(value string) Option {
return setHeader(HTTPHeaderOssCompleteAll, value)
}

// RequestPayerParam is an option to set payer who pay for the request
func RequestPayerParam(payerType PayerType) Option {
return addParam(strings.ToLower(HTTPHeaderOssRequester), strings.ToLower(string(payerType)))
Expand Down