このトピックでは、OSS SDK for Go を使用してバケット内のすべてのオブジェクトを一覧表示する方法について説明します。
注記
このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID
cn-hangzhouを使用しています。デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。バケットが配置されているのと同じリージョン内の他の Alibaba Cloud サービスを使用してバケット内のリソースにアクセスする場合は、内部エンドポイントを使用します。Object Storage Service (OSS) でサポートされているリージョンとエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報を構成する方法の詳細については、「アクセス認証情報を構成する」をご参照ください。
oss:ListObjects権限は、オブジェクトを一覧表示するために必要です。詳細については、「RAM ユーザーにカスタム権限を付与する」をご参照ください。
メソッド
オブジェクトを一覧表示するための高度な API 操作
OSS SDK for Go V2 は、自動ページネーションをサポートするページネータを提供します。API 操作を複数回呼び出すと、OSS SDK for Go V2 は自動的に次のページの結果を取得します。
ページネータには、<OperationName>Paginator 形式のオブジェクトと、New<OperationName>Paginator 形式のページネータ作成メソッドが含まれています。ページネータ作成メソッドは、HasNext メソッドと NextPage メソッドを実装するページネータオブジェクトを返します。HasNext メソッドは、さらにページが存在するかどうかを判断するために使用され、NextPage メソッドは、API 操作を呼び出して次のページを取得するために使用されます。
次のコードは、操作の詳細を示しています。
type ListObjectsV2Paginator struct
func (p *ListObjectsV2Paginator) HasNext() bool
func (p *ListObjectsV2Paginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*ListObjectsV2Result, error)
func (c *Client) NewListObjectsV2Paginator(request *ListObjectsV2Request, optFns ...func(*PaginatorOptions)) *ListObjectsV2Paginatorリクエストパラメータ
パラメータ | タイプ | 説明 |
request | *ListObjectsV2Request | 特定の API 操作のパラメータ。詳細については、ListObjectsV2Request を参照してください。 |
optFns | ...func(*PaginatorOptions) | オプション。操作レベルのパラメータ。詳細については、PaginatorOptions を参照してください。 |
次の表は、ListObjectsV2 の共通パラメーターについて説明しています。
パラメータ | 説明 |
prefix | 返されるオブジェクトの名前に含まれている必要があるプレフィックス。 |
maxKeys | 毎回返されるオブジェクトの最大数。 |
delimiter | 名前で一覧表示するオブジェクトをグループ化するために使用する文字。指定されたプレフィックスからプレフィックスの後の最初のデリミタまでの同じ文字列を含む名前のオブジェクトは、CommonPrefixes 要素としてグループ化されます。 |
startAfter | 一覧表示操作を開始する位置。 |
fetchOwner | レスポンスに所有者情報を含めるかどうかを指定します。
|
レスポンスパラメータ
レスポンスパラメータ | 説明 |
*ListObjectsV2Paginator | HasNext メソッドと NextPage メソッドを実装するページネータオブジェクト。 HasNext メソッドは、さらにページが存在するかどうかを判断するために使用され、NextPage メソッドは API 操作を呼び出して次のページを取得するために使用されます。 |
オブジェクトを一覧表示するための基本的な API 操作
func (c *Client) ListObjectsV2(ctx context.Context, request *ListObjectsV2Request, optFns ...func(*Options)) (*ListObjectsV2Result, error)リクエストパラメータ
パラメータ | タイプ | 説明 |
ctx | context.Context | リクエストのコンテキスト。リクエストの合計継続時間を指定するために使用できます。 |
request | *ListObjectsV2Request | 特定の API 操作のパラメータ。詳細については、ListObjectsV2Request を参照してください。 |
optFns | ...func(*Options) | オプション。操作レベルのパラメータ。詳細については、Options を参照してください。 |
レスポンスパラメータ
レスポンスパラメータ | タイプ | 説明 |
result | *ListObjectsV2Result | 操作に対するレスポンス。このパラメータは、err の値が nil の場合に利用可能です。詳細については、ListObjectsV2Result を参照してください。 |
err | error | リクエストのステータス。リクエストが失敗した場合、err の値は nil ではありません。 |
サンプルコード
高度な API 操作を使用してオブジェクトを一覧表示する
次のコードは、ページネータを使用してバケット内のすべてのオブジェクトを一覧表示する方法を示しています。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの`名前`。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、バケット名が必要です")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// オブジェクトを一覧表示するためのリクエストを作成します。
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
}
// ページネータを作成します。
p := client.NewListObjectsV2Paginator(request)
// ページ番号カウンタを初期化します。
var i int
log.Println("オブジェクト:")
// ページネータの各ページをトラバースします。
for p.HasNext() {
i++
// 次のページのデータを取得します。
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("ページ %v の取得に失敗しました、%v", i, err)
}
// ページ上の各オブジェクトに関する情報を表示します。
for _, obj := range page.Contents {
log.Printf("オブジェクト:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
}
}
}
基本的な API 操作を使用してオブジェクトを一覧表示する
次のコードは、ListObjectsV2 操作を呼び出すことによってバケット内のすべてのオブジェクトを一覧表示する方法を示しています。
package main
import (
"context"
"flag"
"log"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの`名前`。")
}
func main() {
flag.Parse() // コマンドラインパラメータを解析します。
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、バケット名が必要です")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// ListObjectsV2 リクエストを作成します。
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
}
for {
// すべてのオブジェクトを一覧表示する操作を実行します。
lsRes, err := client.ListObjectsV2(context.TODO(), request)
if err != nil {
log.Fatalf("オブジェクトの一覧表示に失敗しました: %v", err)
}
// 結果を表示します。
for _, object := range lsRes.Contents {
log.Printf("オブジェクトキー: %s, タイプ: %s, サイズ: %d, ETag: %s, 最終更新日: %s, ストレージクラス: %s\n",
*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
}
// 一覧表示するオブジェクトがさらに存在する場合、continueToken パラメータの値を更新して残りの結果を取得します。
if lsRes.IsTruncated {
request.ContinuationToken = lsRes.NextContinuationToken
} else {
break // オブジェクトがもう存在しない場合はサイクルを終了します。
}
}
log.Println("すべてのオブジェクトが一覧表示されました。")
}
一般的なシナリオ
ディレクトリ内のすべてのオブジェクトを一覧表示する
ページネータを使用する
サンプルコードは、Prefix パラメータを設定することにより、指定されたディレクトリ内のすべてのオブジェクトのサイズ、最終更新時刻、名前などの情報を一覧表示する方法を示しています。
package main
import (
"context"
"flag"
"fmt"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの`名前`。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、バケット名が必要です")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// オブジェクトを一覧表示するためのリクエストを作成します。
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
Prefix: oss.Ptr("exampledir/"), // 指定されたディレクトリ内のすべてのオブジェクトを一覧表示します
}
// ページネータを作成します。
p := client.NewListObjectsV2Paginator(request)
// ページ番号カウンタを初期化します。
var i int
log.Println("オブジェクト:")
// ページネータの各ページをトラバースします。
for p.HasNext() {
i++
fmt.Printf("ページ %v\n", i)
// 次のページのデータを取得します。
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("ページ %v の取得に失敗しました、%v", i, err)
}
// 継続トークンを出力します。
log.Printf("ContinuationToken:%v\n", oss.ToString(page.ContinuationToken))
// ページ上の各オブジェクトに関する情報を表示します。
for _, obj := range page.Contents {
log.Printf("オブジェクト:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
}
}
}
ListObjectsV2 を使用する
サンプルコードは、Prefix パラメータを設定することにより、指定されたディレクトリ内のすべてのオブジェクトのサイズ、最終更新時刻、名前などの情報を一覧表示する方法を示しています。
package main
import (
"context"
"flag"
"log"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの`名前`。")
}
func main() {
flag.Parse() // コマンドラインパラメータを解析します。
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、バケット名が必要です")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// ListObjectsV2 リクエストを作成します。
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
Prefix: oss.Ptr("exampledir/"), // 指定されたディレクトリ内のすべてのオブジェクトを一覧表示します。
}
for {
lsRes, err := client.ListObjectsV2(context.TODO(), request)
if err != nil {
log.Fatalf("オブジェクトの一覧表示に失敗しました: %v", err)
}
// 結果を表示します。
for _, object := range lsRes.Contents {
log.Printf("オブジェクトキー: %s, タイプ: %s, サイズ: %d, ETag: %s, 最終更新日: %s, ストレージクラス: %s\n",
*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
}
// 一覧表示するオブジェクトがさらに存在する場合、continueToken パラメータの値を更新して残りの結果を取得します。
if lsRes.IsTruncated {
request.ContinuationToken = lsRes.NextContinuationToken
} else {
break // オブジェクトがもう存在しない場合はサイクルを終了します。
}
}
log.Println("すべてのオブジェクトが一覧表示されました。")
}
名前が指定されたプレフィックスを含むオブジェクトを一覧表示する
ページネータを使用する
サンプルコードは、Prefix パラメータを設定することにより、名前が指定されたプレフィックスを含むすべてのオブジェクトのサイズ、最終更新時刻、名前などの情報を一覧表示する方法を示しています。
package main
import (
"context"
"flag"
"fmt"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの`名前`。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、バケット名が必要です")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// オブジェクトを一覧表示するためのリクエストを作成します。
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
Prefix: oss.Ptr("my-object-"), // 名前が指定されたプレフィックスを含むすべてのオブジェクトを一覧表示します。
}
// ページネータを作成します。
p := client.NewListObjectsV2Paginator(request)
// ページ番号カウンタを初期化します。
var i int
log.Println("オブジェクト:")
// ページネータの各ページをトラバースします。
for p.HasNext() {
i++
fmt.Printf("ページ %v\n", i)
// 次のページのデータを取得します。
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("ページ %v の取得に失敗しました、%v", i, err)
}
// 継続トークンを出力します。
log.Printf("ContinuationToken:%v\n", oss.ToString(page.ContinuationToken))
// ページ上の各オブジェクトに関する情報を表示します。
for _, obj := range page.Contents {
log.Printf("オブジェクト:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
}
}
}
ListObjectsV2 を使用する
サンプルコードは、Prefix パラメータを設定することにより、名前が指定されたプレフィックスを含むすべてのオブジェクトのサイズ、最終更新時刻、名前などの情報を一覧表示する方法を示しています。
package main
import (
"context"
"flag"
"log"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの`名前`。")
}
func main() {
flag.Parse() // コマンドラインパラメータを解析します。
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、バケット名が必要です")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// ListObjectsV2 リクエストを作成します。
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
Prefix: oss.Ptr("my-object-"),
}
for {
lsRes, err := client.ListObjectsV2(context.TODO(), request)
if err != nil {
log.Fatalf("オブジェクトの一覧表示に失敗しました: %v", err)
}
// 結果を表示します。
for _, object := range lsRes.Contents {
log.Printf("オブジェクトキー: %s, タイプ: %s, サイズ: %d, ETag: %s, 最終更新日: %s, ストレージクラス: %s\n",
*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
}
// 一覧表示するオブジェクトがさらに存在する場合、continueToken パラメータの値を更新して残りの結果を取得します。
if lsRes.IsTruncated {
request.ContinuationToken = lsRes.NextContinuationToken
} else {
break // オブジェクトがもう存在しない場合はサイクルを終了します。
}
}
log.Println("すべてのオブジェクトが一覧表示されました。")
}
指定された数のオブジェクトを一覧表示する
ページネータを使用する
サンプルコードは、MaxKeys パラメータを設定することにより、指定された数のオブジェクトのサイズ、最終更新時刻、名前などの情報を一覧表示する方法を示しています。
package main
import (
"context"
"flag"
"fmt"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの`名前`。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、バケット名が必要です")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// オブジェクトを一覧表示するためのリクエストを作成します。
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
MaxKeys: 10, // 毎回返されるオブジェクトの最大数。
}
// ページネータを作成します。
p := client.NewListObjectsV2Paginator(request)
// ページ番号カウンタを初期化します。
var i int
log.Println("オブジェクト:")
// ページネータの各ページをトラバースします。
for p.HasNext() {
i++
fmt.Printf("ページ %v\n", i)
// 次のページのデータを取得します。
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("ページ %v の取得に失敗しました、%v", i, err)
}
// 継続トークンを出力します。
log.Printf("ContinuationToken:%v\n", oss.ToString(page.ContinuationToken))
// ページ上の各オブジェクトに関する情報を表示します。
for _, obj := range page.Contents {
log.Printf("オブジェクト:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
}
}
}
ListObjectsV2 を使用する
サンプルコードは、MaxKeys パラメータを設定することにより、指定された数のオブジェクトのサイズ、最終更新時刻、名前などの情報を一覧表示する方法を示しています。
package main
import (
"context"
"flag"
"log"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの`名前`。")
}
func main() {
flag.Parse() // コマンドラインパラメータを解析します。
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、バケット名が必要です")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// ListObjectsV2 リクエストを作成します。
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
MaxKeys: 10, // 毎回返されるオブジェクトの最大数。
}
for {
lsRes, err := client.ListObjectsV2(context.TODO(), request)
if err != nil {
log.Fatalf("オブジェクトの一覧表示に失敗しました: %v", err)
}
// 結果を表示します。
for _, object := range lsRes.Contents {
log.Printf("オブジェクトキー: %s, タイプ: %s, サイズ: %d, ETag: %s, 最終更新日: %s, ストレージクラス: %s\n",
*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
}
// 一覧表示するオブジェクトがさらに存在する場合、continueToken パラメータの値を更新して残りの結果を取得します。
if lsRes.IsTruncated {
request.ContinuationToken = lsRes.NextContinuationToken
} else {
break // オブジェクトがもう存在しない場合はサイクルを終了します。
}
}
log.Println("すべてのオブジェクトが一覧表示されました。")
}
特定の位置からすべてのオブジェクトを一覧表示する
ページネータを使用する
サンプルコードは、StartAfter パラメータを設定することにより、一覧表示の開始位置を指定する方法を示しています。名前が StartAfter パラメータの値よりもアルファベット順で後のすべてのオブジェクトが返されます。
package main
import (
"context"
"flag"
"fmt"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの`名前`。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、バケット名が必要です")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// オブジェクトを一覧表示するためのリクエストを作成します。
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
StartAfter: oss.Ptr("my-object"), // オブジェクトの一覧表示の開始位置を指定します
}
// ページネータを作成します。
p := client.NewListObjectsV2Paginator(request)
// ページ番号カウンタを初期化します。
var i int
log.Println("オブジェクト:")
// ページネータの各ページをトラバースします。
for p.HasNext() {
i++
fmt.Printf("ページ %v\n", i)
// 次のページのデータを取得します。
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("ページ %v の取得に失敗しました、%v", i, err)
}
// 継続トークンを出力します。
log.Printf("ContinuationToken:%v\n", oss.ToString(page.ContinuationToken))
// ページ上の各オブジェクトに関する情報を表示します。
for _, obj := range page.Contents {
log.Printf("オブジェクト:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
}
}
}
ListObjectsV2 を使用する
サンプルコードは、StartAfter パラメータを設定することにより、一覧表示の開始位置を指定する方法を示しています。名前が StartAfter パラメータの値よりもアルファベット順で後のすべてのオブジェクトが返されます。
package main
import (
"context"
"flag"
"log"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの`名前`。")
}
func main() {
flag.Parse() // コマンドラインパラメータを解析します。
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、バケット名が必要です")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// ListObjectsV2 リクエストを作成します。
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
StartAfter: oss.Ptr("my-object"), // オブジェクトの一覧表示の開始位置を指定します。
}
for {
lsRes, err := client.ListObjectsV2(context.TODO(), request)
if err != nil {
log.Fatalf("オブジェクトの一覧表示に失敗しました: %v", err)
}
// 結果を表示します。
for _, object := range lsRes.Contents {
log.Printf("オブジェクトキー: %s, タイプ: %s, サイズ: %d, ETag: %s, 最終更新日: %s, ストレージクラス: %s\n",
*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
}
// 一覧表示するオブジェクトがさらに存在する場合、continueToken パラメータの値を更新して残りの結果を取得します。
if lsRes.IsTruncated {
request.ContinuationToken = lsRes.NextContinuationToken
} else {
break // オブジェクトがもう存在しない場合はサイクルを終了します。
}
}
log.Println("すべてのオブジェクトが一覧表示されました。")
}
ルートディレクトリ内のすべてのオブジェクトを一覧表示する
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // リージョン。
bucketName string // バケット名。
)
// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの`名前`。")
}
func main() {
flag.Parse() // コマンドラインパラメータを解析します。
// バケット名が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、バケット名が必要です")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータ、リージョンが必要です")
}
// デフォルトの構成を読み込み、認証情報プロバイダとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSSClient インスタンスを作成します。
client := oss.NewClient(cfg)
// ListObjectsV2 リクエストを作成し、デリミタをスラッシュ (/) に設定します。
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
Delimiter: oss.Ptr("/"), // スラッシュ (/) をデリミタとして使用します。
MaxKeys: 100, // リクエストごとに返されるオブジェクトの最大数。
}
// すべてのサブディレクトリ (CommonPrefixes) を格納する変数。
var subdirectories []oss.CommonPrefix
for {
lsRes, err := client.ListObjectsV2(context.TODO(), request)
if err != nil {
log.Fatalf("オブジェクトの一覧表示に失敗しました: %v", err)
}
// サブディレクトリ (CommonPrefixes) をログに記録し、収集します。
for _, prefix := range lsRes.CommonPrefixes {
log.Printf("サブディレクトリ: %v\n", *prefix.Prefix)
subdirectories = append(subdirectories, prefix)
}
// 一覧表示するオブジェクトがさらに存在する場合、continueToken パラメータの値を更新して残りの結果を取得します。
if lsRes.IsTruncated {
request.ContinuationToken = lsRes.NextContinuationToken
} else {
break // オブジェクトがもう存在しない場合はサイクルを終了します。
}
}
log.Println("すべてのサブディレクトリが一覧表示されました。")
log.Printf("サブディレクトリの合計数: %d\n", len(subdirectories))
}
参照
オブジェクトを一覧表示するために使用される完全なサンプルコードについては、GitHub にアクセスしてください。
オブジェクトを一覧表示するために呼び出すことができる高度な API 操作の詳細については、NewListObjectsV2Paginator を参照してください。
オブジェクトを一覧表示するために呼び出すことができる基本的な API 操作の詳細については、ListObjectsV2 を参照してください。
ページネータの詳細については、開発者ガイド を参照してください。