功能说明
列举高性能桶中的对象(GET Bucket),支持按前缀过滤、目录分隔与分页翻页。该方法定义在
BucketService 上。对高性能桶发起请求时,SDK 通过 RapidCredentialTransport 自动完成会话鉴权。方法原型
func (s *BucketService) Get(ctx context.Context, opt *BucketGetOptions) (*BucketGetResult, *Response, error)
参数说明
type BucketGetOptions struct {Prefix stringDelimiter stringMarker stringMaxKeys intEncodingType string}
参数名称 | 参数描述 | 类型 | 是否必选 |
ctx | 请求上下文,用于控制超时与取消 | context.Context | 是 |
opt | 列举选项,可为 nil | *BucketGetOptions | 否 |
Prefix | 对象键前缀,仅列举以该前缀开头的对象 | string | 否 |
Delimiter | 分隔符,常用 / 实现按目录层级列举 | string | 否 |
Marker | 起始标记,从该键之后开始列举,用于翻页 | string | 否 |
MaxKeys | 单次返回的最大对象数,取值范围1~1000,默认1000 | int | 否 |
EncodingType | 返回结果的编码方式,可选值:url | string | 否 |
返回结果说明
type BucketGetResult struct {Name stringPrefix stringMarker stringNextMarker stringDelimiter stringMaxKeys intIsTruncated boolContents []ObjectCommonPrefixes []stringEncodingType string}
参数名称 | 参数描述 | 类型 |
Name | 桶名称 | string |
Prefix | 本次列举使用的前缀 | string |
Marker | 本次列举的起始标记 | string |
NextMarker | 下一页的起始标记, IsTruncated 为 true 时有效 | string |
Delimiter | 本次列举使用的分隔符 | string |
MaxKeys | 本次列举的最大对象数 | int |
IsTruncated | 结果是否被截断(是否还有下一页) | bool |
Contents | 对象列表,每个 Object 含 Key、ETag、Size、LastModified 等 | []Object |
CommonPrefixes | 使用分隔符时聚合出的公共前缀(相当于子目录) | []string |
使用案例
package mainimport ("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()marker := ""for {opt := &cos.BucketGetOptions{Prefix: "photos/",MaxKeys: 100,Marker: marker,}res, _, err := c.Bucket.Get(ctx, opt)if err != nil {log.Fatalf("ListObjects failed: %v", err)}for _, obj := range res.Contents {log.Printf("Key: %s, Size: %d", obj.Key, obj.Size)}if !res.IsTruncated {break}marker = res.NextMarker}log.Println("ListObjects OK")}
注意事项
列举对象调用的是
c.Bucket.Get,而非 c.Object 下的方法。当
IsTruncated 为 true 时,表示还有更多对象未返回,需将 NextMarker 赋给下一次请求的 Marker 继续翻页。配合
Delimiter="/" 与 Prefix 可模拟目录层级浏览,聚合出的子目录通过 CommonPrefixes 返回。MaxKeys 取值范围为1~1000,默认1000。