Skip to content

Commit b95652e

Browse files
authored
Merge pull request #284 from tencentyun/feature_jojoliang_6aaec5dc
更新GetPresignedURL3, 兼容trpc-go url格式
2 parents 43fbd84 + 90a859c commit b95652e

File tree

4 files changed

+33
-19
lines changed

4 files changed

+33
-19
lines changed

cos.go

Lines changed: 4 additions & 2 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.56"
29+
Version = "0.7.57"
3030
UserAgent = "cos-go-sdk-v5/" + Version
3131
contentTypeXML = "application/xml"
3232
defaultServiceBaseURL = "http://service.cos.myqcloud.com"
@@ -96,7 +96,9 @@ func (*BaseURL) innerCheck(u *url.URL, reg *regexp.Regexp) bool {
9696
}
9797

9898
func (u *BaseURL) Check() bool {
99-
return u.innerCheck(u.BucketURL, bucketDomainChecker) && u.innerCheck(u.ServiceURL, serviceDomainChecker) && u.innerCheck(u.BatchURL, batchDomainChecker)
99+
return u.innerCheck(u.BucketURL, bucketDomainChecker) &&
100+
(u.innerCheck(u.ServiceURL, serviceDomainChecker) || u.innerCheck(u.ServiceURL, bucketDomainChecker)) &&
101+
(u.innerCheck(u.BatchURL, batchDomainChecker) || u.innerCheck(u.BatchURL, bucketDomainChecker))
100102
}
101103

102104
// NewBucketURL 生成 BaseURL 所需的 BucketURL

cos_test.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -247,52 +247,52 @@ func Test_CheckRetrieable(t *testing.T) {
247247

248248
func Test_BaseURL(t *testing.T) {
249249
u, _ := url.Parse("https://example-125000000.cos.ap-chengdu.myqcloud.com")
250-
if !(&BaseURL{BucketURL: u}).Check() {
250+
if !(&BaseURL{BucketURL: u, ServiceURL: u, BatchURL: u}).Check() {
251251
t.Errorf("BaseURL check failed: %v", u)
252252
}
253253
u, _ = url.Parse("https://example-125000000.cos-website.ap-chengdu.myqcloud.com")
254-
if !(&BaseURL{BucketURL: u}).Check() {
254+
if !(&BaseURL{BucketURL: u, ServiceURL: u, BatchURL: u}).Check() {
255255
t.Errorf("BaseURL check failed: %v", u)
256256
}
257257
u, _ = url.Parse("https://example-125000000.cos-internal.ap-chengdu.tencentcos.cn")
258-
if !(&BaseURL{BucketURL: u}).Check() {
258+
if !(&BaseURL{BucketURL: u, ServiceURL: u, BatchURL: u}).Check() {
259259
t.Errorf("BaseURL check failed: %v", u)
260260
}
261261
u, _ = url.Parse("https://example-125000000.cos.ap-chengdu.tencentcos.cn")
262-
if !(&BaseURL{BucketURL: u}).Check() {
262+
if !(&BaseURL{BucketURL: u, ServiceURL: u, BatchURL: u}).Check() {
263263
t.Errorf("BaseURL check failed: %v", u)
264264
}
265265
u, _ = url.Parse("https://example-125000000.cos.accelerate.myqcloud.com")
266-
if !(&BaseURL{BucketURL: u}).Check() {
266+
if !(&BaseURL{BucketURL: u, ServiceURL: u, BatchURL: u}).Check() {
267267
t.Errorf("BaseURL check failed: %v", u)
268268
}
269269
u, _ = url.Parse("https://example-125000000.cos-internal.accelerate.tencentcos.cn")
270-
if !(&BaseURL{BucketURL: u}).Check() {
270+
if !(&BaseURL{BucketURL: u, ServiceURL: u, BatchURL: u}).Check() {
271271
t.Errorf("BaseURL check failed: %v", u)
272272
}
273273
u, _ = url.Parse("http://example-125000000.cos.ap-chengdu.myqcloud.com:8080")
274-
if !(&BaseURL{BucketURL: u}).Check() {
274+
if !(&BaseURL{BucketURL: u, ServiceURL: u, BatchURL: u}).Check() {
275275
t.Errorf("BaseURL check failed: %v", u)
276276
}
277277
u, _ = url.Parse("http://example-125000000.cos-internal.ap-chengdu.tencentcos.cn:80")
278-
if !(&BaseURL{BucketURL: u}).Check() {
278+
if !(&BaseURL{BucketURL: u, ServiceURL: u, BatchURL: u}).Check() {
279279
t.Errorf("BaseURL check failed: %v", u)
280280
}
281281
u, _ = url.Parse("https://example-125000000.cos-internal.accelerate.tencentcos.cn:443")
282-
if !(&BaseURL{BucketURL: u}).Check() {
282+
if !(&BaseURL{BucketURL: u, ServiceURL: u, BatchURL: u}).Check() {
283283
t.Errorf("BaseURL check failed: %v", u)
284284
}
285285

286286
u, _ = url.Parse("https://[email protected]/.myqcloud.com")
287-
if (&BaseURL{BucketURL: u}).Check() {
287+
if (&BaseURL{BucketURL: u, ServiceURL: u, BatchURL: u}).Check() {
288288
t.Errorf("BaseURL check failed: %v", u)
289289
}
290290
u, _ = url.Parse("https://[email protected]/.myqcloud.com:443")
291-
if (&BaseURL{BucketURL: u}).Check() {
291+
if (&BaseURL{BucketURL: u, ServiceURL: u, BatchURL: u}).Check() {
292292
t.Errorf("BaseURL check failed: %v", u)
293293
}
294294
u, _ = url.Parse("https://[email protected]/myqcloud.com")
295-
if (&BaseURL{BucketURL: u}).Check() {
295+
if (&BaseURL{BucketURL: u, ServiceURL: u, BatchURL: u}).Check() {
296296
t.Errorf("BaseURL check failed: %v", u)
297297
}
298298

object.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,11 @@ func (s *ObjectService) GetObjectURL(name string) *url.URL {
118118
}
119119

120120
type PresignedURLOptions struct {
121-
Query *url.Values `xml:"-" url:"-" header:"-"`
122-
Header *http.Header `header:"-,omitempty" url:"-" xml:"-"`
123-
SignMerged bool `xml:"-" url:"-" header:"-"`
124-
AuthTime *AuthTime `xml:"-" url:"-" header:"-"`
121+
Query *url.Values `xml:"-" url:"-" header:"-"`
122+
Header *http.Header `header:"-,omitempty" url:"-" xml:"-"`
123+
SignMerged bool `xml:"-" url:"-" header:"-"`
124+
AuthTime *AuthTime `xml:"-" url:"-" header:"-"`
125+
EncodeDelimiter bool `xml:"-" url:"-" header:"-"`
125126
}
126127

127128
// GetPresignedURL get the object presigned to down or upload file by url
@@ -282,7 +283,17 @@ func (s *ObjectService) GetPresignedURL3(ctx context.Context, httpMethod, name s
282283
if name == "" {
283284
return nil, fmt.Errorf("object key is empty.")
284285
}
285-
name = encodeURIComponent(name, []byte("/"))
286+
var encodeDelimiter bool
287+
if opt != nil {
288+
if popt, ok := opt.(*PresignedURLOptions); ok {
289+
encodeDelimiter = popt.EncodeDelimiter
290+
}
291+
}
292+
if encodeDelimiter {
293+
name = encodeURIComponent(name)
294+
} else {
295+
name = encodeURIComponent(name, []byte("/"))
296+
}
286297

287298
cred := s.client.GetCredential()
288299
if cred == nil {

object_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,7 @@ func TestObjectService_GetPresignedURL3(t *testing.T) {
452452
t.Fatalf("Wrong PreSignedURL!")
453453
}
454454

455+
opt1.EncodeDelimiter = true
455456
_, err = client.Object.GetPresignedURL3(c, http.MethodPut, "", time.Hour, opt1)
456457
if err == nil {
457458
t.Errorf("GetPresignedURL expect err is not null")

0 commit comments

Comments
 (0)