本文介绍如何使用OSS Go SDK列举指定存储空间(Bucket)下的所有文件。
注意事项
本文示例代码以华东1(杭州)的地域ID
cn-hangzhou
为例,默认使用外网Endpoint,如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见OSS地域和访问域名。本文以从环境变量读取访问凭证为例。如何配置访问凭证,请参见配置访问凭证。
要列举文件,您必须有
oss:ListObjects
权限。具体操作,请参见为RAM用户授权自定义的权限策略。
方法定义
高级版列举文件API
对常用的列举接口,Go SDK V2最新版提供了分页器(Paginator)支持自动分页,当进行多次调用时,自动为您获取下一页结果。使用分页器时,您只需要编写处理结果的代码。
分页器包含了分页器对象<OperationName>Paginator和分页器创建方法New<OperationName>Paginator。分页器创建方法返回一个分页器对象,该对象实现了HasNext和NextPage方法,分别用于判断是否还有更多页,并调用操作来获取下一页。
列举文件的接口定义如下:
type ListObjectsV2Paginator struct
func (p *ListObjectsV2Paginator) HasNext() bool
func (p *ListObjectsV2Paginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*ListObjectsV2Result, error)
func (c *Client) NewListObjectsV2Paginator(request *ListObjectsV2Request, optFns ...func(*PaginatorOptions)) *ListObjectsV2Paginator
请求参数列表
参数名 | 类型 | 说明 |
request | *ListObjectsV2Request | 设置具体接口的请求参数, 具体请参见ListObjectsV2Request |
optFns | ...func(*PaginatorOptions) | (可选)接口级的配置参数, 请参见PaginatorOptions |
其中,ListObjectsV2Request的常用参数列举如下:
参数 | 描述 |
prefix | 限定返回的文件必须以prefix作为前缀 |
maxKeys | 限定每次最多返回的文件数量 |
delimiter | 对文件名称进行分组的一个字符,所有名称包含指定的前缀且第一次出现delimiter字符之间的文件作为一组元素(commonPrefixes) |
startAfter | 此次列举文件的起点 |
fetchOwner | 指定是否在返回结果中包含Owner信息
|
返回值列表
返回值 | 说明 |
*ListObjectsV2Paginator | 分页器对象,该对象实现了HasNext和NextPage方法,分别用于判断是否还有更多页, 并调用操作来获取下一页 |
基础版列举文件API
func (c *Client) ListObjectsV2(ctx context.Context, request *ListObjectsV2Request, optFns ...func(*Options)) (*ListObjectsV2Result, error)
请求参数列表
参数名 | 类型 | 说明 |
ctx | context.Context | 请求的上下文,可以用来设置请求的总时限 |
request | *ListObjectsV2Request | 设置具体接口的请求参数,具体请参见ListObjectsV2Request |
optFns | ...func(*Options) | (可选)接口级的配置参数, 具体请参见Options |
返回值列表
返回值名 | 类型 | 说明 |
result | *ListObjectsV2Result | 接口返回值,当 err 为nil 时有效,具体请参见ListObjectsV2Result |
err | error | 请求的状态,当请求失败时,err 不为 nil |
示例代码
使用高级版API列举文件
您可以通过以下示例代码,使用分页器列举指定Bucket下的所有文件。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The `name` of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建列出对象的请求
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
}
// 创建分页器
p := client.NewListObjectsV2Paginator(request)
// 初始化页码计数器
var i int
log.Println("Objects:")
// 遍历分页器中的每一页
for p.HasNext() {
i++
// 获取下一页的数据
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("failed to get page %v, %v", i, err)
}
// 打印该页中的每个对象的信息
for _, obj := range page.Contents {
log.Printf("Object:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
}
}
}
使用基础版API列举文件
您可以通过以下示例代码,使用ListObjectsV2接口列举指定Bucket下的所有文件。
package main
import (
"context"
"flag"
"log"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储桶名称
)
// init 函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The `name` of the bucket.")
}
func main() {
flag.Parse() // 解析命令行参数
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建 OSS 客户端
client := oss.NewClient(cfg)
var continueToken string = ""
// 创建 ListObjectsV2 请求
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
ContinuationToken: &continueToken,
MaxKeys: 10,
}
for {
// 执行列举所有文件的操作
lsRes, err := client.ListObjectsV2(context.TODO(), request)
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列举结果
for _, object := range lsRes.Contents {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s\n",
*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
}
// 如果还有更多对象需要列举,则更新continueToken标记并继续循环
if lsRes.IsTruncated {
continueToken = *lsRes.NextContinuationToken
} else {
break // 如果没有更多对象,退出循环
}
}
log.Println("All objects have been listed.")
}
常见使用场景
列举指定目录下所有文件
使用分页器Paginator
以下示例代码通过设置Prefix参数,列举指定目录下所有文件的信息,包括文件大小、文件最后修改时间以及文件名等。
package main
import (
"context"
"flag"
"fmt"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The `name` of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建列出对象的请求
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
Prefix: oss.Ptr("exampledir/"), // 列举指定目录下的所有对象
}
// 创建分页器
p := client.NewListObjectsV2Paginator(request)
// 初始化页码计数器
var i int
log.Println("Objects:")
// 遍历分页器中的每一页
for p.HasNext() {
i++
fmt.Printf("Page %v\n", i)
// 获取下一页的数据
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("failed to get page %v, %v", i, err)
}
//打印continue token
log.Printf("ContinuationToken:%v\n", oss.ToString(page.ContinuationToken))
// 打印该页中的每个对象的信息
for _, obj := range page.Contents {
log.Printf("Object:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
}
}
}
使用ListObjectsV2
以下示例代码通过设置Prefix参数,列举指定目录下所有文件的信息,包括文件大小、文件最后修改时间以及文件名等。
package main
import (
"context"
"flag"
"log"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储桶名称
)
// init 函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The `name` of the bucket.")
}
func main() {
flag.Parse() // 解析命令行参数
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建 OSS 客户端
client := oss.NewClient(cfg)
var continueToken string = ""
// 创建 ListObjectsV2 请求
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
ContinuationToken: &continueToken,
Prefix: oss.Ptr("exampledir/"), // 列举指定目录下的所有对象
}
for {
lsRes, err := client.ListObjectsV2(context.TODO(), request)
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列举结果
for _, object := range lsRes.Contents {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s\n",
*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
}
// 如果还有更多对象需要列举,则更新continueToken标记并继续循环
if lsRes.IsTruncated {
continueToken = *lsRes.NextContinuationToken
} else {
break // 如果没有更多对象,退出循环
}
}
log.Println("All objects have been listed.")
}
列举指定前缀的文件
使用分页器Paginator
以下示例代码通过设置Prefix参数,列举指定前缀的文件信息,包括文件大小、文件最后修改时间以及文件名等。
package main
import (
"context"
"flag"
"fmt"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The `name` of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建列出对象的请求
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
Prefix: oss.Ptr("my-object-"), // 列举指定前缀的所有对象
}
// 创建分页器
p := client.NewListObjectsV2Paginator(request)
// 初始化页码计数器
var i int
log.Println("Objects:")
// 遍历分页器中的每一页
for p.HasNext() {
i++
fmt.Printf("Page %v\n", i)
// 获取下一页的数据
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("failed to get page %v, %v", i, err)
}
//打印continue token
log.Printf("ContinuationToken:%v\n", oss.ToString(page.ContinuationToken))
// 打印该页中的每个对象的信息
for _, obj := range page.Contents {
log.Printf("Object:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
}
}
}
使用ListObjectsV2
以下示例代码通过设置Prefix参数,列举指定前缀的文件信息,包括文件大小、文件最后修改时间以及文件名等。
package main
import (
"context"
"flag"
"log"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储桶名称
)
// init 函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The `name` of the bucket.")
}
func main() {
flag.Parse() // 解析命令行参数
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建 OSS 客户端
client := oss.NewClient(cfg)
var continueToken string = ""
// 创建 ListObjectsV2 请求
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
ContinuationToken: &continueToken,
Prefix: oss.Ptr("my-object-"),
}
for {
lsRes, err := client.ListObjectsV2(context.TODO(), request)
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列举结果
for _, object := range lsRes.Contents {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s\n",
*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
}
// 如果还有更多对象需要列举,则更新continueToken标记并继续循环
if lsRes.IsTruncated {
continueToken = *lsRes.NextContinuationToken
} else {
break // 如果没有更多对象,退出循环
}
}
log.Println("All objects have been listed.")
}
列举指定个数的文件
使用分页器Paginator
以下示例代码通过设置MaxKeys参数,列举指定个数的文件的信息,包括文件大小、文件最后修改时间以及文件名等。
package main
import (
"context"
"flag"
"fmt"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The `name` of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建列出对象的请求
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
MaxKeys: 10, //每次列举返回的最大对象数量
}
// 创建分页器
p := client.NewListObjectsV2Paginator(request)
// 初始化页码计数器
var i int
log.Println("Objects:")
// 遍历分页器中的每一页
for p.HasNext() {
i++
fmt.Printf("Page %v\n", i)
// 获取下一页的数据
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("failed to get page %v, %v", i, err)
}
//打印continue token
log.Printf("ContinuationToken:%v\n", oss.ToString(page.ContinuationToken))
// 打印该页中的每个对象的信息
for _, obj := range page.Contents {
log.Printf("Object:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
}
}
}
使用ListObjectsV2
以下示例代码通过设置MaxKeys参数,列举指定个数的文件的信息,包括文件大小、文件最后修改时间以及文件名等。
package main
import (
"context"
"flag"
"log"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储桶名称
)
// init 函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The `name` of the bucket.")
}
func main() {
flag.Parse() // 解析命令行参数
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建 OSS 客户端
client := oss.NewClient(cfg)
var continueToken string = ""
// 创建 ListObjectsV2 请求
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
ContinuationToken: &continueToken,
MaxKeys: 10, // 每次列举返回的最大对象数量
}
for {
lsRes, err := client.ListObjectsV2(context.TODO(), request)
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列举结果
for _, object := range lsRes.Contents {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s\n",
*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
}
// 如果还有更多对象需要列举,则更新continueToken标记并继续循环
if lsRes.IsTruncated {
continueToken = *lsRes.NextContinuationToken
} else {
break // 如果没有更多对象,退出循环
}
}
log.Println("All objects have been listed.")
}
列举指定起始位置之后的文件
使用分页器Paginator
以下示例代码通过设置StartAfter参数,指定列举的起始位置,返回StartAfter字典序后的所有文件。
package main
import (
"context"
"flag"
"fmt"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The `name` of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建列出对象的请求
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
StartAfter: oss.Ptr("my-object"), // 指定列举对象的起始位置
}
// 创建分页器
p := client.NewListObjectsV2Paginator(request)
// 初始化页码计数器
var i int
log.Println("Objects:")
// 遍历分页器中的每一页
for p.HasNext() {
i++
fmt.Printf("Page %v\n", i)
// 获取下一页的数据
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("failed to get page %v, %v", i, err)
}
//打印continue token
log.Printf("ContinuationToken:%v\n", oss.ToString(page.ContinuationToken))
// 打印该页中的每个对象的信息
for _, obj := range page.Contents {
log.Printf("Object:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
}
}
}
使用ListObjectsV2
以下示例代码通过设置StartAfter参数,指定列举的起始位置,返回StartAfter字典序后的所有文件。
package main
import (
"context"
"flag"
"log"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储桶名称
)
// init 函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The `name` of the bucket.")
}
func main() {
flag.Parse() // 解析命令行参数
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建 OSS 客户端
client := oss.NewClient(cfg)
var continueToken string = ""
// 创建 ListObjectsV2 请求
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
ContinuationToken: &continueToken,
StartAfter: oss.Ptr("my-object"), // 指定列举对象的起始位置
}
for {
lsRes, err := client.ListObjectsV2(context.TODO(), request)
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列举结果
for _, object := range lsRes.Contents {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s\n",
*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
}
// 如果还有更多对象需要列举,则更新continueToken标记并继续循环
if lsRes.IsTruncated {
continueToken = *lsRes.NextContinuationToken
} else {
break // 如果没有更多对象,退出循环
}
}
log.Println("All objects have been listed.")
}
相关文档
关于列举文件的完整示例代码,请参见GitHub示例。
关于高级版列举文件的API接口,请参见NewListObjectsV2Paginator。
关于基础版列举文件的API接口,请参见ListObjectsV2。
关于分页器的更多信息,请参见开发者指南。