跳转至

列举对象

简介

将用户指定桶中存储文件按照列表的形式展现出来。列举桶中所有文件主要有两种方法:简单列举、按前缀列举。

简单列举

提供桶名后,列举桶中所有的文件。

以下代码为简单列举示例:

通过 ListObjects 方法列举

package main

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

func exitErrorf(msg string, args ...interface{}) {
  fmt.Fprintf(os.Stderr, msg+"\n", args...)
  os.Exit(1)
}

func main() {
  sess, err := session.NewSession(&aws.Config{
    Region:      aws.String("Region"),
    Endpoint:    aws.String("your-endpoint"),
    Credentials: credentials.NewStaticCredentials("your-access-key", "your-secret-access-key", ""),
  })
  svc := s3.New(sess)
  params := &s3.ListObjectsInput{
    Bucket: aws.String("your-bucket-name"),
  }
  // 列举文件时,最多一次性列举 1000 个文件
  resp, err := svc.ListObjects(params)
  if err != nil {
    exitErrorf("Unable to list items in bucket %q, %v", *params.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("")
  }
}

通过 ListObjectsV2 方法列举

package main

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

func main() {
  sess, err := session.NewSession(&aws.Config{
    Region:      aws.String("Region"),
    Endpoint:    aws.String("your-endpoint"),
    Credentials: credentials.NewStaticCredentials("your-access-key", "your-secret-access-key", ""),
  })
  svc := s3.New(sess)
  // 桶名
  bucket := "your-bucket-name"
  // 列举文件时,最多一次性列举 1000 个文件
  resp, err := svc.ListObjectsV2(&s3.ListObjectsV2Input{Bucket: aws.String(bucket)})
  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)
}

注意

ListObjectsV2 是该操作的最新修订版本,建议在应用程序开发中使用修订后的 API,为了向后兼容,同时支持早期版本 ListObjects。

按前缀列举

提供桶名后,根据匹配文件前缀,列举桶中所有的文件。

以下代码为按前缀列举示例:

package main

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

func exitErrorf(msg string, args ...interface{}) {
    fmt.Fprintf(os.Stderr, msg+"\n", args...)
    os.Exit(1)
}

func main() {
    sess, err := session.NewSession(&aws.Config{
        Region:      aws.String("Region"),
        Endpoint:    aws.String("your-endpoint"),
        Credentials: credentials.NewStaticCredentials("your-access-key", "your-secret-access-key", ""),
    })
    svc := s3.New(sess)
    params := &s3.ListObjectsInput{
        Bucket: aws.String("your-bucket-name"),
    }
    //列举文件时,最多一次性列举 1000 个文件
    resp, err := svc.ListObjects(params.SetPrefix("your-prefix"))
    if err != nil {
            exitErrorf("Unable to list items in bucket %q, %v", *params.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("")
    }
}