简体   繁体   English

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

[英]How to list items in an aws S3 bucket directory in golang?

I have an Amazon S3 bucket by name "Project" and want to find count of files in Project/screenshots/hotels.我有一个名为“Project”的 Amazon S3 存储桶,并希望在 Project/screenshots/hotels 中查找文件数。 I am only getting total files in the whole s3 using golang SDK while specifying only bucket name and an error when specifying whole path in bucket name.我只使用 golang SDK 获取整个 s3 中的总文件,同时仅指定存储桶名称,并在指定存储桶名称中的整个路径时出错。

https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/go/example_code/s3/s3_list_objects.go 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)
}

The rest of the "path" is not part of the bucket. “路径”的 rest 不是存储桶的一部分。 You want to set the Prefix to screenshots/hotels/ .您想将Prefix设置为screenshots/hotels/ See ListObjectV2Input doc请参阅ListObjectV2Input 文档

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM