【问题标题】:How to list items in an aws S3 bucket directory如何列出 aws S3 存储桶目录中的项目
【发布时间】:2022-01-23 23:10:36
【问题描述】:

我有一个名为“Project”的 Amazon S3 存储桶,并且想要查找 Project/screenshots/hotels 中的文件数。我只使用 Go SDK 获取整个 s3 中的总文件,同时仅指定存储桶名称,并且在指定存储桶名称中的整个路径时出错。

https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/go/example_code/s3/s3_list_objects.go

package main

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

// Lists the items in the specified S3 Bucket
//
// Usage:
//    go run s3_list_objects.go BUCKET_NAME
func main() {
    bucket := "Project/screenshots/hotels"

    // Initialize a session in us-west-2 that the SDK will use to load
    // credentials from the shared credentials file ~/.aws/credentials.
    sess, err := session.NewSession(&aws.Config{
        Region: aws.String("us-east-1")},
    )
    var temp int64 = 1000000000
    var maxKeys *int64  
    maxKeys = &temp
    // Create S3 service client
    svc := s3.New(sess)
    // Get the list of items
    resp, err := svc.ListObjectsV2(&s3.ListObjectsV2Input{Bucket: aws.String(bucket),MaxKeys: maxKeys})
    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 没有目录结构,但它们让您可以通过使用键前缀来假装它们有。
  • 仅供参考,最大对象限制为 1000(也是默认值).. 如果您期望更多对象,您可以使用自动分页器 ListObjectsV2Pages 它采用与 ListObjectsV2 docs.aws.amazon.com/sdk-for-go/api/service/s3/… 相同的输入跨度>

标签: amazon-web-services go amazon-s3 sdk aws-sdk


【解决方案1】:

“路径”的其余部分不是存储桶的一部分。您想将Prefix 设置为screenshots/hotels/。 见ListObjectV2Input doc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 2014-04-17
    • 2018-03-04
    • 2018-04-30
    相关资源
    最近更新 更多