我正在使用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
答案 0 :(得分:1)
您需要在prefix
中添加ListObjectsInput
。看看这个https://stackoverflow.com/a/43737253/1225070
params := &s3.ListObjectsInput {
Bucket: aws.String("bucket"),
Prefix: aws.String("root/subfolder"),
}
希望这会对你有所帮助。