Skip to content

Commit

Permalink
add optional header
Browse files Browse the repository at this point in the history
  • Loading branch information
jojoliang committed Oct 31, 2022
1 parent 2631285 commit c996f66
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 39 deletions.
10 changes: 5 additions & 5 deletions bucket.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func (s *BucketService) Get(ctx context.Context, opt *BucketGetOptions) (*Bucket
optHeader: opt,
result: &res,
}
resp, err := s.client.send(ctx, &sendOpt)
resp, err := s.client.doRetry(ctx, &sendOpt)
return &res, resp, err
}

Expand Down Expand Up @@ -80,7 +80,7 @@ func (s *BucketService) Put(ctx context.Context, opt *BucketPutOptions) (*Respon
if opt != nil && opt.CreateBucketConfiguration != nil {
sendOpt.body = opt.CreateBucketConfiguration
}
resp, err := s.client.send(ctx, &sendOpt)
resp, err := s.client.doRetry(ctx, &sendOpt)
return resp, err
}

Expand All @@ -102,7 +102,7 @@ func (s *BucketService) Delete(ctx context.Context, opt ...*BucketDeleteOptions)
method: http.MethodDelete,
optHeader: dopt,
}
resp, err := s.client.send(ctx, &sendOpt)
resp, err := s.client.doRetry(ctx, &sendOpt)
return resp, err
}

Expand All @@ -128,7 +128,7 @@ func (s *BucketService) Head(ctx context.Context, opt ...*BucketHeadOptions) (*R
method: http.MethodHead,
optHeader: hopt,
}
resp, err := s.client.send(ctx, &sendOpt)
resp, err := s.client.doRetry(ctx, &sendOpt)
return resp, err
}

Expand Down Expand Up @@ -206,6 +206,6 @@ func (s *BucketService) GetObjectVersions(ctx context.Context, opt *BucketGetObj
optHeader: opt,
result: &res,
}
resp, err := s.client.send(ctx, &sendOpt)
resp, err := s.client.doRetry(ctx, &sendOpt)
return &res, resp, err
}
39 changes: 25 additions & 14 deletions bucket_intelligenttiering.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,39 +7,50 @@ import (
)

type BucketIntelligentTieringTransition struct {
Days int `xml:"Days,omitempty"`
RequestFrequent int `xml:"RequestFrequent,omitempty"`
Days int `xml:"Days,omitempty" header:"-"`
RequestFrequent int `xml:"RequestFrequent,omitempty" header:"-"`
}

type BucketPutIntelligentTieringOptions struct {
XMLName xml.Name `xml:"IntelligentTieringConfiguration"`
Status string `xml:"Status,omitempty"`
Transition *BucketIntelligentTieringTransition `xml:"Transition,omitempty"`
XMLName xml.Name `xml:"IntelligentTieringConfiguration" header:"-"`
Status string `xml:"Status,omitempty" header:"-"`
Transition *BucketIntelligentTieringTransition `xml:"Transition,omitempty" header:"-"`
XOptionHeader *http.Header `header:"-,omitempty" url:"-" xml:"-"`
}

type BucketGetIntelligentTieringResult BucketPutIntelligentTieringOptions

type BucketGetIntelligentTieringOptions struct {
XOptionHeader *http.Header `header:"-,omitempty" url:"-" xml:"-"`
}

func (s *BucketService) PutIntelligentTiering(ctx context.Context, opt *BucketPutIntelligentTieringOptions) (*Response, error) {
if opt != nil && opt.Transition != nil {
opt.Transition.RequestFrequent = 1
}
sendOpt := sendOptions{
baseURL: s.client.BaseURL.BucketURL,
uri: "/?intelligenttiering",
method: http.MethodPut,
body: opt,
baseURL: s.client.BaseURL.BucketURL,
uri: "/?intelligenttiering",
method: http.MethodPut,
optHeader: opt,
body: opt,
}
resp, err := s.client.doRetry(ctx, &sendOpt)
return resp, err
}

func (s *BucketService) GetIntelligentTiering(ctx context.Context) (*BucketGetIntelligentTieringResult, *Response, error) {
func (s *BucketService) GetIntelligentTiering(ctx context.Context, opt ...*BucketGetIntelligentTieringOptions) (*BucketGetIntelligentTieringResult, *Response, error) {
var optHeader *BucketGetIntelligentTieringOptions
if len(opt) > 0 {
optHeader = opt[0]
}
var res BucketGetIntelligentTieringResult
sendOpt := sendOptions{
baseURL: s.client.BaseURL.BucketURL,
uri: "/?intelligenttiering",
method: http.MethodGet,
result: &res,
baseURL: s.client.BaseURL.BucketURL,
uri: "/?intelligenttiering",
method: http.MethodGet,
optHeader: optHeader,
result: &res,
}
resp, err := s.client.doRetry(ctx, &sendOpt)
return &res, resp, err
Expand Down
32 changes: 26 additions & 6 deletions cos.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ import (

const (
// Version current go sdk version
Version = "0.7.39"
Version = "0.7.40"
UserAgent = "cos-go-sdk-v5/" + Version
contentTypeXML = "application/xml"
defaultServiceBaseURL = "http://service.cos.myqcloud.com"
XOptionalKey = "cos-go-sdk-v5-XOptionalKey"
)

var (
Expand Down Expand Up @@ -59,9 +60,9 @@ type BaseURL struct {

// NewBucketURL 生成 BaseURL 所需的 BucketURL
//
// bucketName: bucket名称, bucket的命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式
// Region: 区域代码: ap-beijing-1,ap-beijing,ap-shanghai,ap-guangzhou...
// secure: 是否使用 https
// bucketName: bucket名称, bucket的命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式
// Region: 区域代码: ap-beijing-1,ap-beijing,ap-shanghai,ap-guangzhou...
// secure: 是否使用 https
func NewBucketURL(bucketName, region string, secure bool) (*url.URL, error) {
schema := "https"
if !secure {
Expand Down Expand Up @@ -233,7 +234,7 @@ func (c *Client) newRequest(ctx context.Context, baseURL *url.URL, uri, method s
return
}

req.Header, err = addHeaderOptions(req.Header, optHeader)
req.Header, err = addHeaderOptions(ctx, req.Header, optHeader)
if err != nil {
return
}
Expand Down Expand Up @@ -429,9 +430,27 @@ func addURLOptions(s string, opt interface{}) (string, error) {
return u.String(), nil
}

type XOptionalValue struct {
Header *http.Header
}

// addHeaderOptions adds the parameters in opt as Header fields to req. opt
// must be a struct whose fields may contain "header" tags.
func addHeaderOptions(header http.Header, opt interface{}) (http.Header, error) {
func addHeaderOptions(ctx context.Context, header http.Header, opt interface{}) (http.Header, error) {
defer func() {
// 通过context传递
if val := ctx.Value(XOptionalKey); val != nil {
if optVal, ok := val.(*XOptionalValue); ok {
if optVal.Header != nil {
for key, values := range *optVal.Header {
for _, value := range values {
header.Add(key, value)
}
}
}
}
}
}()
v := reflect.ValueOf(opt)
if v.Kind() == reflect.Ptr && v.IsNil() {
return header, nil
Expand All @@ -447,6 +466,7 @@ func addHeaderOptions(header http.Header, opt interface{}) (http.Header, error)
header.Add(key, value)
}
}

return header, nil
}

Expand Down
17 changes: 3 additions & 14 deletions object_part_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,6 @@ func TestObjectService_CopyPart(t *testing.T) {
"partNumber": "1",
}
testFormValues(t, r, vs)
fmt.Printf("==============\n")
fmt.Fprint(w, `<Error>
<Code>string</Code>
<Message>string</Message>
Expand All @@ -438,20 +437,10 @@ func TestObjectService_CopyPart(t *testing.T) {
</Error>`)
})

r, _, err := client.Object.CopyPart(context.Background(),
_, _, err := client.Object.CopyPart(context.Background(),
name, uploadID, partNumber, sourceUrl, opt)
if err != nil {
t.Fatalf("Object.CopyPart returned error: %v", err)
}

want := &CopyPartResult{
XMLName: xml.Name{Local: "CopyPartResult"},
ETag: `"ba82b57cfdfda8bd17ad4e5879ebb4fe"`,
LastModified: "2017-09-04T04:45:45",
}

if !reflect.DeepEqual(r, want) {
t.Errorf("Object.Copy returned %+v, want %+v", r, want)
if err == nil {
t.Fatalf("Object.CopyPart returned error is nil")
}
}

Expand Down

0 comments on commit c996f66

Please sign in to comment.