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

列举对象

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

功能说明

列举高性能桶中的对象(GET Bucket),支持按前缀过滤、目录分隔与分页翻页。该方法定义在 BucketService 上。对高性能桶发起请求时,SDK 通过 RapidCredentialTransport 自动完成会话鉴权。

方法原型

func (s *BucketService) Get(ctx context.Context, opt *BucketGetOptions) (*BucketGetResult, *Response, error)

参数说明

type BucketGetOptions struct {
Prefix string
Delimiter string
Marker string
MaxKeys int
EncodingType 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 string
Prefix string
Marker string
NextMarker string
Delimiter string
MaxKeys int
IsTruncated bool
Contents []Object
CommonPrefixes []string
EncodingType 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 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()
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。
错误处理方式请参见 异常处理。