通过 HeadBucket,获取存储桶(Bucket)的信息, 同时可以根据返回的 err 中的 HTTP Code 信息,判断桶是否存在。本文介绍如何获取桶元数据和判断桶是否存在。
tos:HeadBucket
权限。具体操作,请参见权限配置指南。package main import ( "context" "fmt" "net/http" "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 具有 TOS 访问权限 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" region = "cn-beijing" // 填写 BucketName bucketName = "*** Provide your bucket name ***" ) // 初始化客户端 client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey))) checkErr(err) // 查看存储桶元数据信息 resp, err := client.HeadBucket(context.Background(), &tos.HeadBucketInput{Bucket: bucketName}) if err != nil { // 判断桶是否存在 if serverErr, ok := err.(*tos.TosServerError); ok { if serverErr.StatusCode == http.StatusNotFound { // 存储桶不存在 fmt.Println("Bucket not found.") } else { fmt.Println("Error:", serverErr.Error()) fmt.Println("Request ID:", serverErr.RequestID) fmt.Println("Response Status Code:", serverErr.StatusCode) fmt.Println("Response Header:", serverErr.Header) panic(err) } } else { panic(err) } } // 桶存在,查看请求信息和桶信息 fmt.Println("Head Bucket Request ID: ", resp.RequestID) fmt.Println("Head Bucket Response Status Code: ", resp.StatusCode)
package main import ( "context" "fmt" "net/http" "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 具有 TOS 访问权限 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" region = "cn-beijing" // 填写 BucketName bucketName = "*** Provide your bucket name ***" ) // 初始化客户端 client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey))) checkErr(err) // 查看存储桶元数据信息 resp, err := client.HeadBucket(context.Background(), &tos.HeadBucketInput{Bucket: bucketName}) if err != nil { // 判断桶是否存在 if serverErr, ok := err.(*tos.TosServerError); ok { if serverErr.StatusCode == http.StatusNotFound { fmt.Println("Bucket not found.") } else { 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) panic(err) } } else { panic(err) } } // 桶存在,查看请求信息和桶信息 fmt.Println("Head Bucket Request ID: ", resp.RequestID) fmt.Println("Head Bucket Response Status Code: ", resp.StatusCode) // 查看存储桶地域 fmt.Println("Bucket Region:", resp.Region) // 查看存储桶存储类型 fmt.Println("Bucket Storage Class:", resp.StorageClass) // 查看桶AZ类型 fmt.Println("Bucket Az Redundancy:", resp.AzRedundancy) }
关于获取桶的元数据 API 文档,请参见 HeadBucket。