Skip to content

Commit e2856a9

Browse files
committed
Merge branch 'dev-jojoliang' into 'master' (merge request !118)
预签名文件路径不合并,如../不合并成/
2 parents 2fc78aa + 26600b8 commit e2856a9

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

cos.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import (
2626

2727
const (
2828
// Version current go sdk version
29-
Version = "0.7.62"
29+
Version = "0.7.63"
3030
UserAgent = "cos-go-sdk-v5/" + Version
3131
contentTypeXML = "application/xml"
3232
defaultServiceBaseURL = "http://service.cos.myqcloud.com"
@@ -271,14 +271,16 @@ type commonHeader struct {
271271
ContentLength int64 `header:"Content-Length,omitempty"`
272272
}
273273

274-
func (c *Client) newPresignedRequest(ctx context.Context, sendOpt *sendOptions) (req *http.Request, err error) {
274+
func (c *Client) newPresignedRequest(ctx context.Context, sendOpt *sendOptions, enablePathMerge bool) (req *http.Request, err error) {
275275
sendOpt.uri, err = addURLOptions(sendOpt.uri, sendOpt.optQuery)
276276
if err != nil {
277277
return
278278
}
279-
u, _ := url.Parse(sendOpt.uri)
280-
urlStr := sendOpt.baseURL.ResolveReference(u).String()
281-
279+
urlStr := fmt.Sprintf("%s://%s%s", sendOpt.baseURL.Scheme, sendOpt.baseURL.Host, sendOpt.uri)
280+
if enablePathMerge {
281+
u, _ := url.Parse(sendOpt.uri)
282+
urlStr = sendOpt.baseURL.ResolveReference(u).String()
283+
}
282284
req, err = http.NewRequest(sendOpt.method, urlStr, nil)
283285
if err != nil {
284286
return

object.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ type PresignedURLOptions struct {
123123
SignMerged bool `xml:"-" url:"-" header:"-"`
124124
AuthTime *AuthTime `xml:"-" url:"-" header:"-"`
125125
EncodeDelimiter bool `xml:"-" url:"-" header:"-"`
126+
EnablePathMerge bool `xml:"-" url:"-" header:"-"`
126127
}
127128

128129
// GetPresignedURL get the object presigned to down or upload file by url
@@ -146,6 +147,7 @@ func (s *ObjectService) GetPresignedURL(ctx context.Context, httpMethod, name, a
146147
optHeader: opt,
147148
}
148149
var authTime *AuthTime
150+
var enablePathMerge bool
149151
if opt != nil {
150152
if popt, ok := opt.(*presignedURLTestingOptions); ok {
151153
authTime = popt.authTime
@@ -160,9 +162,12 @@ func (s *ObjectService) GetPresignedURL(ctx context.Context, httpMethod, name, a
160162
if popt.AuthTime != nil {
161163
authTime = popt.AuthTime
162164
}
165+
if popt.EnablePathMerge {
166+
enablePathMerge = true
167+
}
163168
}
164169
}
165-
req, err := s.client.newPresignedRequest(ctx, &sendOpt)
170+
req, err := s.client.newPresignedRequest(ctx, &sendOpt, enablePathMerge)
166171
if err != nil {
167172
return nil, err
168173
}
@@ -220,6 +225,7 @@ func (s *ObjectService) GetPresignedURL2(ctx context.Context, httpMethod, name s
220225
optQuery: opt,
221226
optHeader: opt,
222227
}
228+
var enablePathMerge bool
223229
var authTime *AuthTime
224230
mark := "?"
225231
if opt != nil {
@@ -237,13 +243,16 @@ func (s *ObjectService) GetPresignedURL2(ctx context.Context, httpMethod, name s
237243
if popt.AuthTime != nil {
238244
authTime = popt.AuthTime
239245
}
246+
if popt.EnablePathMerge {
247+
enablePathMerge = true
248+
}
240249
}
241250
}
242251
if cred.SessionToken != "" {
243252
sendOpt.uri = fmt.Sprintf("%s%s%s", sendOpt.uri, mark, url.Values{"x-cos-security-token": []string{cred.SessionToken}}.Encode())
244253
}
245254

246-
req, err := s.client.newPresignedRequest(ctx, &sendOpt)
255+
req, err := s.client.newPresignedRequest(ctx, &sendOpt, enablePathMerge)
247256
if err != nil {
248257
return nil, err
249258
}
@@ -306,6 +315,7 @@ func (s *ObjectService) GetPresignedURL3(ctx context.Context, httpMethod, name s
306315
optQuery: opt,
307316
optHeader: opt,
308317
}
318+
var enablePathMerge bool
309319
var authTime *AuthTime
310320
mark := "?"
311321
if opt != nil {
@@ -323,13 +333,16 @@ func (s *ObjectService) GetPresignedURL3(ctx context.Context, httpMethod, name s
323333
if popt.AuthTime != nil {
324334
authTime = popt.AuthTime
325335
}
336+
if popt.EnablePathMerge {
337+
enablePathMerge = true
338+
}
326339
}
327340
}
328341
if cred.SessionToken != "" {
329342
sendOpt.uri = fmt.Sprintf("%s%s%s", sendOpt.uri, mark, url.Values{"x-cos-security-token": []string{cred.SessionToken}}.Encode())
330343
}
331344

332-
req, err := s.client.newPresignedRequest(ctx, &sendOpt)
345+
req, err := s.client.newPresignedRequest(ctx, &sendOpt, enablePathMerge)
333346
if err != nil {
334347
return nil, err
335348
}
@@ -382,7 +395,7 @@ func (s *ObjectService) GetSignature(ctx context.Context, httpMethod, name, ak,
382395
sendOpt.uri = fmt.Sprintf("%s?%s", sendOpt.uri, qs)
383396
}
384397
}
385-
req, err := s.client.newPresignedRequest(ctx, &sendOpt)
398+
req, err := s.client.newPresignedRequest(ctx, &sendOpt, false)
386399
if err != nil {
387400
return ""
388401
}

0 commit comments

Comments
 (0)