登录
首页 >  Golang >  Go问答

列出 AWS S3 存储桶中的文件列表

来源:stackoverflow

时间:2024-03-19 08:30:23 145浏览 收藏

**文章首段摘要:** 使用 Go SDK 列出 Amazon S3 存储桶中的文件列表时,仅指定存储桶名称会导致错误。为了获取特定目录下的文件数量,需要在存储桶名称中指定目录路径。本指南将展示如何设置 Prefix 参数来实现这一目标。通过使用 Prefix,您可以仅获取指定目录下的文件列表,从而避免列出整个存储桶中的所有文件,提高代码效率。

问题内容

我有一个名为“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)
}

正确答案


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

今天关于《列出 AWS S3 存储桶中的文件列表》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>