文件(Object)上传至存储空间(Bucket)后,OSS会自动生成文件URL,您可以直接通过文件URL(即Bucket外网访问域名)访问该文件。如果您希望通过自定义域名访问这些Object,需要添加CNAME记录将自定义域名绑定至Object所在的Bucket。
注意事项
创建CnameToken
以下代码用于创建CnameToken。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
/// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Bucket名称,例如examplebucket。
bucketName := "examplebucket"
// 填写自定义域名。
cname := "www.example.com"
cbResult,err := client.CreateBucketCnameToken(bucketName,cname)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("Cname: %s\n",cbResult.Cname)
fmt.Printf("Token: %s\n",cbResult.Token)
fmt.Printf("ExpireTime: %s\n",cbResult.ExpireTime)
}
获取CnameToken
以下代码用于获取CnameToken。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Bucket名称,例如examplebucket。
bucketName := "examplebucket"
// 填写自定义域名。
cname := "www.example.com"
// 获取CnameToken。
cbResult, err := client.GetBucketCnameToken(bucketName, cname)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 打印绑定的Cname名称。
fmt.Printf("Cname: %s\n", cbResult.Cname)
// 打印OSS返回的CnameToken。
fmt.Printf("Token: %s\n", cbResult.Token)
// 打印CnameToken的过期时间。
fmt.Printf("ExpireTime: %s\n", cbResult.ExpireTime)
}
添加CNAME记录
绑定自定义域名
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Bucket名称,例如examplebucket。
bucketName := "examplebucket"
// 填写自定义域名。
cname := "www.example.com"
err = client.PutBucketCname(bucketName, cname)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("Put Bucket Cname Success!")
}
绑定自定义域名和证书
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
/// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Bucket名称,例如examplebucket。
bucketName := "examplebucket"
var putCnameConfig oss.PutBucketCname
var CertificateConfig oss.CertificateConfiguration
// 填写自定义域名。
putCnameConfig.Cname = "www.example.com"
// 填写证书公钥。
certificate := "-----BEGIN CERTIFICATE-----MIIGeDCCBOCgAwIBAgIRAPj4FWpW5XN6kwgU7*******-----END CERTIFICATE-----"
// 填写证书私钥。
privateKey := "-----BEGIN CERTIFICATE-----MIIFBzCCA++gT2H2hT6Wb3nwxjpLIfXmSVcV*****-----END CERTIFICATE-----"
// 填写证书ID。
CertificateConfig.CertId = "92******-cn-hangzhou"
CertificateConfig.Certificate = certificate
CertificateConfig.PrivateKey = privateKey
CertificateConfig.Force = true
putCnameConfig.CertificateConfiguration = &CertificateConfig
err = client.PutBucketCnameWithCertificate(bucketName,putCnameConfig)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("Bind Certificate Success!")
}
解除证书
如果您不希望该域名继续使用该证书,可以执行解绑证书的操作。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
/// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Bucket名称,例如examplebucket。
bucketName := "examplebucket"
var putCnameConfig oss.PutBucketCname
var CertificateConfig oss.CertificateConfiguration
// 填写自定义域名。
putCnameConfig.Cname = "www.example.com"
// 删除证书。
CertificateConfig.DeleteCertificate = true
putCnameConfig.CertificateConfiguration = &CertificateConfig
err = client.PutBucketCnameWithCertificate(bucketName,putCnameConfig)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("Unbind Certificate Success!")
}
查看CNAME记录
以下代码用于查看CNAME记录。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Bucket名称,例如examplebucket。
bucketName := "examplebucket"
// 查看CNAME记录。
cnResult, err := client.ListBucketCname(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
var certificate oss.Certificate
fmt.Printf("Bucket:%s\n", cnResult.Bucket)
fmt.Printf("Owner:%s\n", cnResult.Owner)
if len(cnResult.Cname) > 0 {
for _, cnameInfo := range cnResult.Cname {
// 打印自定义域名。
fmt.Printf("Domain:%s\n", cnameInfo.Domain)
// 打印绑定自定义域名的时间。
fmt.Printf("LastModified:%s\n", cnameInfo.LastModified)
// 打印域名所处状态。
fmt.Printf("Status:%s\n", cnameInfo.Status)
if cnameInfo.Certificate != certificate {
// 打印证书来源。
fmt.Printf("Type:%s\n", cnameInfo.Certificate.Type)
// 打印证书ID。
fmt.Printf("CertId:%s\n", cnameInfo.Certificate.CertId)
// 打印证书状态。
fmt.Printf("Status:%s\n", cnameInfo.Certificate.Status)
// 打印证书绑定时间。
fmt.Printf("CreationDate:%s\n", cnameInfo.Certificate.CreationDate)
// 打印证书签名。
fmt.Printf("Fingerprint:%s\n", cnameInfo.Certificate.Fingerprint)
// 打印证书有效期起始时间。
fmt.Printf("ValidStartDate:%s\n", cnameInfo.Certificate.ValidStartDate)
// 打印证书有效期终止时间。
fmt.Printf("ValidEndDate:%s\n", cnameInfo.Certificate.ValidEndDate)
}
}
}
}
删除CNAME记录
以下代码用于删除CNAME记录。
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Bucket名称,例如examplebucket。
bucketName := "examplebucket"
// 填写自定义域名。
cname := "www.example.com"
// 删除CNAME记录。
err = client.DeleteBucketCname(bucketName,cname)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Delete Bucket Cname Success!")
}
相关文档
关于创建域名所有权验证所需的CnameToken的API接口说明,请参见CreateCnameToken。
关于获取CnameToken的API接口说明,请参见GetCnameToken。
关于添加CNAME记录的API接口说明,请参见PutCname。
关于查看CNAME记录的API接口说明,请参见ListCname。
关于删除CNAME记录的API接口说明,请参见DeleteCname。
文档内容是否对您有帮助?