如何列出 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 存储桶目录中的项目的主要内容,如果未能解决你的问题,请参考以下文章