From 8f491b2933def8370ceece2ab09da7b0b077e2b2 Mon Sep 17 00:00:00 2001 From: lm379 <69002314+lm379@users.noreply.github.com> Date: Tue, 11 Mar 2025 23:58:23 +0800 Subject: [PATCH] feat: allow tencent cloud cos dual stack domain (#8123) Co-authored-by: lm379 --- backend/utils/cloud_storage/client/cos.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/backend/utils/cloud_storage/client/cos.go b/backend/utils/cloud_storage/client/cos.go index 0184c8ed4..55e4078bf 100644 --- a/backend/utils/cloud_storage/client/cos.go +++ b/backend/utils/cloud_storage/client/cos.go @@ -6,6 +6,7 @@ import ( "net/http" "net/url" "os" + "regexp" cosSDK "github.com/tencentyun/cos-go-sdk-v5" ) @@ -18,6 +19,7 @@ type cosClient struct { func NewCosClient(vars map[string]interface{}) (*cosClient, error) { region := loadParamFromVars("region", vars) + endpoint := loadParamFromVars("endpoint", vars) accessKey := loadParamFromVars("accessKey", vars) secretKey := loadParamFromVars("secretKey", vars) bucket := loadParamFromVars("bucket", vars) @@ -26,7 +28,16 @@ func NewCosClient(vars map[string]interface{}) (*cosClient, error) { scType = "Standard" } - u, _ := url.Parse(fmt.Sprintf("https://cos.%s.myqcloud.com", region)) + // 允许使用对象存储双栈域名 + endpointType := "cos" + if len(endpoint) != 0 { + re := regexp.MustCompile(`.*cos-dualstack\..*`) + if re.MatchString(endpoint) { + endpointType = "cos-dualstack" + } + } + + u, _ := url.Parse(fmt.Sprintf("https://%s.%s.myqcloud.com", endpointType, region)) b := &cosSDK.BaseURL{BucketURL: u} client := cosSDK.NewClient(b, &http.Client{ Transport: &cosSDK.AuthorizationTransport{ @@ -36,7 +47,7 @@ func NewCosClient(vars map[string]interface{}) (*cosClient, error) { }) if len(bucket) != 0 { - u2, _ := url.Parse(fmt.Sprintf("https://%s.cos.%s.myqcloud.com", bucket, region)) + u2, _ := url.Parse(fmt.Sprintf("https://%s.%s.%s.myqcloud.com", bucket, endpointType, region)) b2 := &cosSDK.BaseURL{BucketURL: u2} clientWithBucket := cosSDK.NewClient(b2, &http.Client{ Transport: &cosSDK.AuthorizationTransport{