如何列出 aws S3 存储桶目录中的项目

Posted

技术标签:

【中文标题】如何列出 aws S3 存储桶目录中的项目【英文标题】:How to list items in an aws S3 bucket directory 【发布时间】: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.ListObjectsV2InputBucket: 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/… 相同的输入跨度> 【参考方案1】:

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

【讨论】:

以上是关于如何列出 aws S3 存储桶目录中的项目的主要内容,如果未能解决你的问题,请参考以下文章

列出 AWS S3 存储桶的特定“文件夹”中的文件

AWS S3策略限制用户仅列出存储桶中的某些文件夹

如何从存储桶根重定向到 AWS S3 中的子目录?

列出 aws 存储桶中的对象

如何删除/计算 s3 存储桶中的对象?

如何将驻留在账户 A 中的 s3 存储桶的访问权限授予来自多个 aws 账户的不同 iam 用户?