From 98625e705ace9e8f01c5e7c57afca952428bfe6d Mon Sep 17 00:00:00 2001 From: jojoliang Date: Tue, 3 Sep 2019 22:12:20 +0800 Subject: [PATCH 1/2] fix object upload copy versionid --- object.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/object.go b/object.go index c88dc02..f12a31b 100644 --- a/object.go +++ b/object.go @@ -214,7 +214,16 @@ type ObjectCopyResult struct { // 注意:在跨帐号复制的时候,需要先设置被复制文件的权限为公有读,或者对目标帐号赋权,同帐号则不需要。 // // https://cloud.tencent.com/document/product/436/10881 -func (s *ObjectService) Copy(ctx context.Context, name, sourceURL string, opt *ObjectCopyOptions) (*ObjectCopyResult, *Response, error) { +func (s *ObjectService) Copy(ctx context.Context, name, sourceURL string, opt *ObjectCopyOptions, id ...string) (*ObjectCopyResult, *Response, error) { + var u string + if len(id) == 1 { + u = fmt.Sprintf("%s?versionId=%s", encodeURIComponent(sourceURL), id[0]) + } else if len(id) == 0 { + u = encodeURIComponent(sourceURL) + } else { + return nil, nil, errors.New("wrong params") + } + var res ObjectCopyResult if opt == nil { opt = new(ObjectCopyOptions) @@ -222,7 +231,7 @@ func (s *ObjectService) Copy(ctx context.Context, name, sourceURL string, opt *O if opt.ObjectCopyHeaderOptions == nil { opt.ObjectCopyHeaderOptions = new(ObjectCopyHeaderOptions) } - opt.XCosCopySource = encodeURIComponent(sourceURL) + opt.XCosCopySource = u sendOpt := sendOptions{ baseURL: s.client.BaseURL.BucketURL, From f5c65cf2cdd9d1c3f4e5b47f4995ce059f1f08a3 Mon Sep 17 00:00:00 2001 From: jojoliang Date: Wed, 4 Sep 2019 20:24:14 +0800 Subject: [PATCH 2/2] update: fix object upload copy versionid --- costesting/ci_test.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/costesting/ci_test.go b/costesting/ci_test.go index ea2dc59..c3827a4 100644 --- a/costesting/ci_test.go +++ b/costesting/ci_test.go @@ -482,15 +482,23 @@ func (s *CosTestSuite) TestCopyObject() { expected := "test" f := strings.NewReader(expected) - _, err = c.Object.Put(context.Background(), source, f, nil) + r, err = c.Object.Put(context.Background(), source, f, nil) assert.Nil(s.T(), err, "PutObject Failed") + var version_id string + if r.Header["X-Cos-Version-Id"] != nil { + version_id = r.Header.Get("X-Cos-Version-Id") + } time.Sleep(3 * time.Second) // Copy file soruceURL := fmt.Sprintf("%s/%s", iu.Host, source) - dest := source + dest := "test/objectMove1" + time.Now().Format(time.RFC3339) //opt := &cos.ObjectCopyOptions{} - _, _, err = s.Client.Object.Copy(context.Background(), dest, soruceURL, nil) + if version_id == "" { + _, _, err = s.Client.Object.Copy(context.Background(), dest, soruceURL, nil) + } else { + _, _, err = s.Client.Object.Copy(context.Background(), dest, soruceURL, nil, version_id) + } assert.Nil(s.T(), err, "PutObjectCopy Failed") // Check content