すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:オブジェクトのリスト (Swift SDK)

最終更新日:Nov 30, 2025

このトピックでは、OSS Swift SDK を使用して、指定されたバケット内のすべてのオブジェクトを一覧表示する方法について説明します。

注意事項

  • このトピックのサンプルコードでは、中国 (杭州) リージョン (リージョン ID: cn-hangzhou) を例として使用します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud サービスから Object Storage Service (OSS) にアクセスする場合は、内部エンドポイントを使用できます。OSS がサポートするリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • オブジェクトをリストするには、oss:ListObjects 権限が必要です。詳細については、「RAM ユーザーへのカスタム権限の付与」をご参照ください。

サンプルコード

次のコードは、`ListObjectsV2` メソッドを使用して、指定されたバケット内のオブジェクトを一覧表示する方法を示しています。

import AlibabaCloudOSS
import Foundation
@main
struct Main {
    static func main() async {
        do {
            // バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
            let region = "cn-hangzhou"
            // バケット名を指定します。
            let bucket = "yourBucketName"
            // オプション。OSS へのアクセスに使用するドメイン名を指定します。たとえば、中国 (杭州) の場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
            let endpoint: String? = nil
            
            // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            let credentialsProvider = EnvironmentCredentialsProvider()
            // OSS クライアントのパラメーターを設定します。
            let config = Configuration.default()
                .withRegion(region)        // バケットが配置されているリージョンを設定します。
                .withCredentialsProvider(credentialsProvider)  // アクセス認証情報を設定します。
                
            // エンドポイントを設定します。
            if let endpoint = endpoint {
                config.withEndpoint(endpoint)
            }
            
            // OSS クライアントインスタンスを作成します。
            let client = Client(config)
            
            // リスト操作を開始するトークンを指定します。
            var continueToken: String?
            // すべてのオブジェクトがリストされたかどうかを確認します。
            var isTruncated: Bool = false
            repeat {
                let result = try await client.listObjectsV2(
                    ListObjectsV2Request(
                        bucket: bucket,
                        maxKeys: 10,
                        continuationToken: continueToken
                    )
                )
                // 現在のページのオブジェクトリストを走査します。
                for content in result.contents ?? [] {
                    // オブジェクトのメタデータ (オブジェクト名、バイト単位のサイズ、最終更新日時) を出力します。
                    print("Object key:\(content.key ?? ""), size: \(String(describing: content.size)), last modified: \(String(describing: content.lastModified))")
                }
                isTruncated = result.isTruncated ?? false
                continueToken = result.nextContinuationToken
            } while isTruncated
        } catch {
            // エラーを出力します。
            print("error: \(error)")
        }
    }
}

一般的なシナリオ

ページネーターを使用して指定されたバケット内のオブジェクトをリストする

次のコードは、`ListObjectsV2` メソッドとページネーターを使用して、指定されたバケット内のオブジェクトを一覧表示する方法を示しています。

import AlibabaCloudOSS
import Foundation
@main
struct Main {
    static func main() async {
        do {
            // バケットが配置されているリージョンを指定します。たとえば、中国 (杭州) の場合は、リージョンを cn-hangzhou に設定します。
            let region = "cn-hangzhou"
            // バケット名を指定します。
            let bucket = "yourBucketName"
            // オプション。OSS へのアクセスに使用するドメイン名を指定します。たとえば、中国 (杭州) の場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
            let endpoint: String? = nil
            
            // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            let credentialsProvider = EnvironmentCredentialsProvider()
            // OSS クライアントのパラメーターを設定します。
            let config = Configuration.default()
                .withRegion(region)        // バケットが配置されているリージョンを設定します。
                .withCredentialsProvider(credentialsProvider)  // アクセス認証情報を設定します。
                
            // エンドポイントを設定します。
            if let endpoint = endpoint {
                config.withEndpoint(endpoint)
            }
            
            // OSS クライアントインスタンスを作成します。
            let client = Client(config)
            // ページネーターリクエストオブジェクトを作成して、ページングですべてのバケット内のオブジェクトを走査します。
            let paginator = client.listObjectsV2Paginator(
                ListObjectsV2Request(
                    bucket: bucket // オブジェクトを一覧表示するバケットの名前を指定します。
                )
            )
            // ページ分割された結果を走査して、ページごとにオブジェクト情報を取得します。
            for try await page in paginator {
                // 現在のページのオブジェクトリストを走査します。
                for content in page.contents ?? [] {
                    // オブジェクトのメタデータ (オブジェクト名、バイト単位のサイズ、最終更新日時) を出力します。
                    print("Object key:\(content.key ?? ""), size: \(String(describing: content.size)), last modified: \(String(describing: content.lastModified))")
                }
            }
        } catch {
            // エラーを出力します。
            print("error: \(error)")
        }
    }
}

リファレンス

  • オブジェクトを一覧表示するための完全なサンプルコードについては、「GitHub サンプル」をご参照ください。

  • オブジェクトを一覧表示するために使用される API 操作の詳細については、「ListObjectsV2」をご参照ください。