You need to enable JavaScript to run this app.
文档中心
对象存储

对象存储

复制全文
下载 pdf
最佳实践
使用 CN 域名访问对象存储
复制全文
下载 pdf
使用 CN 域名访问对象存储
对象存储为了提供更高的可用性,在 .com 结尾的访问域名基础上,支持同一个桶同时使用 .cn 结尾的域名访问对象存储。以备在 .com 结尾的域名无法使用的情况下,可以及时切换到 .cn 结尾的域名,避免出现业务中断。​
地域及访问域名​
​
Region 中文名称​
Region ID​
Endpoint​
S3 Endpoint​
华北2(北京)​
cn-beijing​
内网:tos-cn-beijing.ivolces.cn​
外网:tos-cn-beijing.volces.cn​
内网:tos-s3-cn-beijing.ivolces.cn​
外网:tos-s3-cn-beijing.volces.cn​
华南1(广州)​
cn-guangzhou​
内网:tos-cn-guangzhou.ivolces.cn​
外网:tos-cn-guangzhou.volces.cn​
内网:tos-s3-cn-guangzhou.ivolces.cn​
外网:tos-s3-cn-guangzhou.volces.cn​
华东2(上海)​
cn-shanghai​
内网:tos-cn-shanghai.ivolces.cn​
外网:tos-cn-shanghai.volces.cn​
内网:tos-s3-cn-shanghai.ivolces.cn​
外网:tos-s3-cn-shanghai.volces.cn​
​
域名容灾切换场景​
当出现用户的 TOS 访问域名被封禁,或者域名解析链路中的 DNS 被污染、劫持、NS 被强制修改等导致用户的 TOS .com 访问域名不可用的场景,您可以通过切换 .cn 域名访问对象存储。​
以 Go 代码为例,域名容灾场景切换示例如下。建议提前完成业务代码的预埋,以便在发生域名级别故障时,具备实现使用 .cn 域名容灾的能力。​
​
package main​
​
import (​
"context"​
"fmt"​
"io/ioutil"​
"os"​
​
"github.com/volcengine/ve-tos-golang-sdk/v2/tos"​
)​
​
func checkErr(err error) {​
if err != nil {​
if serverErr, ok := err.(*tos.TosServerError); ok {​
fmt.Println("Error:", serverErr.Error())​
fmt.Println("Request ID:", serverErr.RequestID)​
fmt.Println("Response Status Code:", serverErr.StatusCode)​
fmt.Println("Response Header:", serverErr.Header)​
fmt.Println("Response Err Code:", serverErr.Code)​
fmt.Println("Response Err Msg:", serverErr.Message)​
} else if clientErr, ok := err.(*tos.TosClientError); ok {​
fmt.Println("Error:", clientErr.Error())​
fmt.Println("Client Cause Err:", clientErr.Cause.Error())​
} else {​
fmt.Println("Error:", err)​
}​
panic(err)​
}​
}​
​
func main() {​
var (​
accessKey = os.Getenv("TOS_ACCESS_KEY")​
secretKey = os.Getenv("TOS_SECRET_KEY")​
// Bucket 对于的 Endpoint,以华北2(北京)为例:https://tos-cn-beijing.volces.com​
endpoint = "https://tos-cn-beijing.volces.com"​
cnEndpoint = "https://tos-cn-beijing.volces.cn"​
region = "cn-beijing"​
// 填写 BucketName​
bucketName = "*** Provide your bucket name ***"​
// 填写对象名​
objectKey = "*** Provide your object key ***"​
)​
// 初始化客户端​
client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey)))​
checkErr(err)​
​
cnClient, err := tos.NewClientV2(cnEndpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey)))​
checkErr(err)​
​
// 需要自行实现 useCN 函数,域名容灾场景下 useCN 应返回 True​
if useCN() {​
client = cnClient​
}​
​
// 下载对象​
output, err := client.GetObjectV2(context.Background(), &tos.GetObjectV2Input{​
Bucket: bucketName,​
Key: objectKey,​
})​
checkErr(err)​
defer output.Content.Close()​
fmt.Println("Get object request id: ", output.RequestID)​
fmt.Println("Get object response status code: ", output.StatusCode)​
body, err := ioutil.ReadAll(output.Content)​
checkErr(err)​
fmt.Println("Get Object body: ", body)​
}​
​
​
最近更新时间:2026.02.03 10:19:34
这个页面对您有帮助吗?
有用
有用
无用
无用