帮你快速理解、总结文档立即下载

查询存储桶

最近更新时间:2026-10-21 18:34:07
我的收藏

功能说明

查询一个高性能桶是否存在以及当前调用方是否有权限访问(HEAD Bucket)。目标桶由客户端初始化时的访问域名决定。

方法原型

func (s *BucketService) Head(ctx context.Context, opt ...*BucketHeadOptions) (*Response, error)

参数说明

参数名称
参数描述
类型
是否必选
ctx
请求上下文,用于控制超时与取消
context.Context
是
opt
查询桶选项,可省略,通常直接 c.Bucket.Head(ctx)
...*BucketHeadOptions
否

返回结果说明

参数名称
参数描述
类型
*Response
响应对象,可通过 Response.StatusCode 判断结果:桶存在且有权限返回 200,无权限返回 403,不存在返回 404
*cos.Response
error
错误信息,桶存在且有权限时为 nil
error

使用案例

package main

import (
"context"
"log"
"net/http"
"net/url"
"os"
"time"

"github.com/tencentyun/cos-go-sdk-v5"
)

func main() {
u, _ := url.Parse("https://examplebucket-x--1250000000.cosrapid.ap-guangzhou.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
base := &cos.AuthorizationTransport{
SecretID: os.Getenv("SECRETID"),
SecretKey: os.Getenv("SECRETKEY"),
}
c := cos.NewClient(b, &http.Client{
Transport: cos.NewRapidCredentialTransport(base),
Timeout: 30 * time.Second,
})

ctx := context.Background()

// 方式一:直接调用 Head,根据错误与状态码判断。
_, err := c.Bucket.Head(ctx)
if err != nil {
log.Fatalf("HeadBucket failed: %v", err)
}
log.Println("bucket exists and accessible")

// 方式二:使用 IsExist 封装,直接返回桶是否存在。
exist, err := c.Bucket.IsExist(ctx)
if err != nil {
log.Fatalf("IsExist failed: %v", err)
}
log.Printf("bucket exist: %v", exist)
}

注意事项

Head 返回的 HTTP 状态码可用于区分结果:200 表示桶存在且有权限,403 表示桶存在但无访问权限,404 表示桶不存在。
SDK 提供 func (s *BucketService) IsExist(ctx context.Context) (bool, error),基于 Head 与 IsNotFoundError 封装,桶存在返回 true,404 时返回 false,其他错误原样返回,适合仅需判断桶是否存在的场景。
错误处理方式请参见 异常处理。