ListObjects始终返回1000个对象的列表。我们可以列出按日期排序的对象吗?

时间:2018-01-31 05:17:57

标签: go amazon-s3 aws-sdk

我正在使用aws-doc-sdk-examples/go/example_code/s3示例代码列出我的s3存储桶中的对象。

默认情况下,在存储桶中创建以下两个文件夹:

bucket-logs/AWSLogs/accountxxx/CloudTrail-Digest/
bucket-logs/AWSLogs/accountxxx/CloudTrail/

两个文件夹都有子文件夹,如

/us-region-1/[year]/[month]/[day]/

我使用的是GoLang代码:

package main

import (
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
    "fmt"
    "os"
)

func main() {
    if len(os.Args) != 2 {
        exitErrorf("Bucket name required\nUsage: %s bucket_name",
            os.Args[0])
    }

    bucket := os.Args[1]

    sess, err := session.NewSession(&aws.Config{
        Region: aws.String("us-east-1")},
    )

    svc := s3.New(sess)

    resp, err := svc.ListObjects(&s3.ListObjectsInput{Bucket: aws.String(bucket), })
    if err != nil {
        exitErrorf("Unable to list items in bucket %q, %v", bucket, err)
    }

    for _, item := range resp.Contents {
        fmt.Println("Name:         ", *item.Key)
        fmt.Println("Last modified:", *item.LastModified)
        fmt.Println("Size:         ", *item.Size)
        fmt.Println("Storage class:", *item.StorageClass)
        fmt.Println("")
    }

    fmt.Println("Found", len(resp.Contents), "items in bucket", bucket)
    fmt.Println("")
}

func exitErrorf(msg string, args ...interface{}) {
    fmt.Fprintf(os.Stderr, msg+"\n", args...)
    os.Exit(1)
}

上面的代码总是从bucket-logs/AWSLogs/accountxxx/CloudTrail-Digest/返回1000个对象而我想从bucket-logs/AWSLogs/accountxxx/CloudTrail/文件夹中列出对象。

我们可以这样做吗?我们可以过滤按年/月/日排序的列表对象吗?

任何帮助?

修改

我使用下面的cli命令运行Go程序

./s3_list_objects bucket-logs

1 个答案:

答案 0 :(得分:1)

您需要在prefix中添加ListObjectsInput。看看这个https://stackoverflow.com/a/43737253/1225070

params := &s3.ListObjectsInput { 
    Bucket: aws.String("bucket"), 
    Prefix: aws.String("root/subfolder"), 
} 

希望这会对你有所帮助。