我正在尝试使用 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