列举对象
简介¶
将用户指定桶中存储文件按照列表的形式展现出来。列举桶中所有文件主要有两种方法:简单列举、按前缀列举。
简单列举¶
提供桶名后,列举桶中所有的文件。
以下代码为简单列举示例:
通过 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("")
}
}