首页 > 解决方案 > 如何从 s3 获取超过 1000 个对象

问题描述

我在 s3 上有大约 300K 个对象,我需要获取所有这些对象,根据文档指出只会返回前 1000 个对象。我怎样才能用 Go 完成这个?非常感谢任何帮助。

// Get the list of items
resp, err := s3svc.ListObjectsV2(&s3.ListObjectsV2Input{
    Bucket:  aws.String(Bucket),
    Prefix:  aws.String(Prefix),
})
if err != nil {
    exitErrorf("Unable to list items in bucket %q, %v", Bucket, err)
}

for _, item := range resp.Contents {
    // Store data
}

标签: amazon-web-servicesgoamazon-s3

解决方案


使用延续标记遍历所有对象:

var continuationToken *string
for {
    resp, err := u.s3.ListObjectsV2(&s3.ListObjectsV2Input{
        Bucket:  aws.String(Bucket),
        Prefix:  aws.String(Prefix),
        ContinuationToken: continuationToken,
    })
    if err != nil {
        exitErrorf("Unable to list items in bucket %q, %v", Bucket, err)
    }
    for _, item := range resp.Contents {
         // process each object.
    }
    if !aws.BoolValue(resp.IsTruncated) {
        break
    }
    continuationToken = resp.NextContinuationToken
}

推荐阅读