golang S3 客户端库是否具有获取迭代器函数来检索 S3 存储桶中的所有对象


Does golang S3 client library has the get Iterator function to retrieve all the objects in S3 bucket

我正在尝试使用 Golang 列出 S3 存储桶中的所有对象,但是,我找到了 Golang

S3 列表函数将仅返回 1000 个对象。

所以,在 PHP 中,我可以使用

$objects=S3->getIterator('ListObjects', array('Bucket' => $bucket,'Prefix'=>'test/'));

如果我在 $objects 中迭代 100X 项,它可以返回接下来的 100X 对象。那么有没有

Golang 中的机制(或迭代器函数),我也可以从

迭代器?

谢谢

编辑:是的,他们这样做。

var (
    sqsRegion string
)
func init() {
    if err := godotenv.Load(); err != nil {
        log.Fatalf("Error loading .env file: %s", err.Error())
    }
    sqsRegion = os.Getenv("AWS_REGION")
}
func main() {
    sess := session.New(&aws.Config{Region: aws.String(sqsRegion)})
    svc := s3.New(sess)
    resp, err := svc.ListObjects(&s3.ListObjectsInput{
        Bucket: aws.String("yourbucket"),
    })
    if err != nil {
        log.Fatalln(err.Error())
    }
    for _, key := range resp.Contents {
        log.Println(*key.Key)
    }
}

您可以使用分页列出存储桶的所有文件。

package main
import (
    "fmt"
    "os"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
)
// Lists all objects in a bucket using pagination
//
// Usage:
// listObjects <bucket>
func main() {
    if len(os.Args) < 2 {
        fmt.Println("you must specify a bucket")
        return
    }
    sess := session.Must(session.NewSession())
    svc := s3.New(sess)
    i := 0
    err := svc.ListObjectsPages(&s3.ListObjectsInput{
        Bucket: &os.Args[1],
    }, func(p *s3.ListObjectsOutput, last bool) (shouldContinue bool) {
        fmt.Println("Page,", i)
        i++
        for _, obj := range p.Contents {
            fmt.Println("Object:", *obj.Key)
        }
        return true
    })
    if err != nil {
        fmt.Println("failed to list objects", err)
        return
    }
}

https://github.com/aws/aws-sdk-go/blob/main/example/service/s3/listObjects/listObjects.go