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

Object Storage Service:オブジェクトのリスト

最終更新日:Apr 22, 2026

バケット内のオブジェクトは、デフォルトで辞書順にソートされます。すべてのオブジェクトをリスト表示したり、ディレクトリ別にオブジェクトをリスト表示したり、ページごとのオブジェクト数を調整したりできます。

すべてのオブジェクトのリスト

バケット内のすべてのオブジェクトをリスト表示することは、一般的な操作です。

SDK

Java

詳細については、「オブジェクトのリスト (Java SDK V1)」をご参照ください。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケット名を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // 一度にリストできるオブジェクトの最大数を指定します。
        int maxKeys = 200;
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient を使用しなくなったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            String nextContinuationToken = null;
            ListObjectsV2Result result = null;

            // 前のリスト操作の応答に含まれる nextContinuationToken パラメーターを使用して、ページごとにオブジェクトをリストします。
            do {
                ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName).withMaxKeys(maxKeys);
                listObjectsV2Request.setContinuationToken(nextContinuationToken);
                result = ossClient.listObjectsV2(listObjectsV2Request);

                List<OSSObjectSummary> sums = result.getObjectSummaries();
                for (OSSObjectSummary s : sums) {
                    System.out.println("\t" + s.getKey());
                }

                nextContinuationToken = result.getNextContinuationToken();

            } while (result.isTruncated());
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Python

詳細については、「オブジェクトのリスト (Python SDK V2)」をご参照ください。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="list objects v2 sample")
# --region パラメーターを指定します。これはバケットが配置されているリージョンを指定します。このコマンドライン引数は必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# --bucket パラメーターを指定します。これはバケット名を指定します。このコマンドライン引数は必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# --endpoint パラメーターを指定します。これは他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。このコマンドライン引数はオプションです。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    args = parser.parse_args()  # コマンドライン引数を解析します。

    # 認証のために環境変数からアクセス認証情報を取得します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定をロードし、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    # 設定内のリージョンをコマンドラインで指定されたものに設定します。
    cfg.region = args.region
    # endpoint パラメーターが提供されている場合は、エンドポイントを指定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 設定を使用して OSSClient インスタンスを作成します。
    client = oss.Client(cfg)

    # ListObjectsV2 操作でオブジェクトをリストできるようにページネーターを作成します。
    paginator = client.list_objects_v2_paginator()

    # リストされたオブジェクトの各ページを走査します。
    for page in paginator.iter_page(oss.ListObjectsV2Request(
            bucket=args.bucket
        )
    ):
        # 各ページの各オブジェクトを走査します。
        for o in page.contents:
            # オブジェクトの名前、サイズ、最終更新日時を表示します。
            print(f'Object: {o.key}, {o.size}, {o.last_modified}')

if __name__ == "__main__":
    main() # スクリプトが直接実行される場合、スクリプトの main 関数でエントリポイントを指定します。

Go

詳細については、「オブジェクトのリスト (Go SDK V2)」をご参照ください。

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(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The `name` of the bucket.")
}

func main() {
	// コマンドライン引数を解析します。
	flag.Parse()

	// バケット名が指定されているかどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが指定されているかどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを指定します。
	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("Objects:")

	// ページネーター内の各ページを走査します。
	for p.HasNext() {
		i++

		// 次のページのデータを取得します。
		page, err := p.NextPage(context.TODO())
		if err != nil {
			log.Fatalf("failed to get page %v, %v", i, err)
		}

		// ページ上の各オブジェクトに関する情報を表示します。
		for _, obj := range page.Contents {
			log.Printf("Object:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
		}
	}
}

PHP

詳細については、「オブジェクトのリスト (PHP SDK V2)」をご参照ください。

<?php

// 依存ライブラリをロードするためにオートロードファイルを導入します。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドライン引数の説明を指定します。
$optsdesc = [
    "region" => ['help' => The region in which the bucket is located.', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => The domain names that other services can use to access OSS.', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => The name of the bucket, 'required' => True], // (必須) バケット名を指定します。
];

// 引数の説明を getopt が要求するロングオプションリストに変換します。
// 各引数の末尾にコロン (:) を追加して、値が必要であることを示します。
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// コマンドライン引数を解析します。
$options = getopt("", $longopts);

// 必須パラメーターが設定されているか確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // パラメーターのヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 必須パラメーターが設定されていない場合、プログラムを終了します。
    }
}

// 解析されたパラメーターから値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。

// 環境変数からアクセス認証情報を取得します。
// EnvironmentVariableCredentialsProvider 環境変数から AccessKey ID と AccessKey Secret を取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを指定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // エンドポイントが提供されている場合は、エンドポイントを指定します。
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// ページごとにオブジェクトをリストするために Paginator オブジェクトを作成します。
// ListObjectsV2Paginator オブジェクトを使用して、ページごとにオブジェクトをリストします。
$paginator = new Oss\Paginator\ListObjectsV2Paginator(client: $client);
$iter = $paginator->iterPage(new Oss\Models\ListObjectsV2Request(bucket: $bucket)); // ページネーターを初期化します。

// リストされたオブジェクトを走査します。
foreach ($iter as $page) {
    foreach ($page->contents ??  [] as $object) {
        // ページ上の各オブジェクトに関する情報を表示します。
        // 各オブジェクトの名前、タイプ、サイズを表示します。
        print("Object: $object->key, $object->type, $object->size\n");
    }
}

C#

詳細については、「オブジェクトのリスト (C# SDK V2)」をご参照ください。

using OSS = AlibabaCloud.OSS.V2;  // 後続の使用を簡素化するために、Alibaba Cloud OSS SDK のエイリアスを作成します。

var region = "cn-hangzhou";  // 必須。バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、Region を cn-hangzhou に設定します。
var endpoint = null as string;  // オプション。OSS サービスへのアクセスに使用するドメイン名を指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、Endpoint を https://oss-cn-hangzhou.aliyuncs.com に設定します。
var bucket = "your bucket name";  // 必須。送信先バケットの名前。

// OSS SDK のデフォルト設定をロードします。設定は環境変数から認証情報 (AccessKey など) を自動的に読み取ります。
var cfg = OSS.Configuration.LoadDefault();
// 本人確認のために認証情報を取得するために環境変数を明示的に使用するように設定します (フォーマット: OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)。
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
// 設定でバケットのリージョンを設定します。
cfg.Region = region;   
// エンドポイントが指定されている場合、デフォルトのエンドポイントを上書きします。
if(endpoint != null) 
{
    cfg.Endpoint = endpoint;
} 

// 設定情報を使用して OSS クライアントインスタンスを作成します。
using var client = new OSS.Client(cfg); 

// ListObjectsV2Paginator メソッドを呼び出して、送信先バケット内のすべてのオブジェクトを取得します。
var paginator = client.ListObjectsV2Paginator(new OSS.Models.ListObjectsV2Request()
{
    Bucket = bucket
});

//  バケット内のすべてのオブジェクトの情報を出力します。
Console.WriteLine("Objects:");
await foreach (var page in paginator.IterPageAsync())  // 結果の各ページを非同期に走査します。
{
    // 現在のページの各オブジェクトを走査します。
    foreach (var content in page.Contents ?? [])
    {
        // オブジェクト情報を出力します: キー、サイズ (バイト単位)、最終更新日時。
        Console.WriteLine($"Object:{content.Key}, {content.Size}, {content.LastModified}");
    }
}

Node.js

詳細については、「オブジェクトのリスト (Node.js)」をご参照ください。

const OSS = require('ali-oss');

const client = new OSS({
  // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
  region: 'yourregion',
  // 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // バケット名を指定します。
  bucket: 'yourbucketname'
});

async function list () {
  let continuationToken = null;
  // 各ページに最大 20 個のオブジェクトをリストします。
  const maxKeys = 20;
  do {
    const result = await client.listV2({
      'continuation-token': continuationToken,
      'max-keys': maxKeys
      });
    continuationToken = result.nextContinuationToken;
        console.log(result);
  }while(continuationToken)
}

list();

Harmony

詳細については、「オブジェクトのリスト (Harmony SDK)」をご参照ください。

import Client, { RequestError } from '@aliyun/oss';

// OSS クライアントインスタンスを作成します。
const client = new Client({
  // RAM ユーザーの AccessKey ID に置き換えます。
  accessKeyId: 'yourAccessKeyId',
  // RAM ユーザーの AccessKey Secret に置き換えます。
  accessKeySecret: 'yourAccessKeySecret',
  // バケットが配置されているリージョンを設定します。たとえば、中国 (杭州) リージョンのバケットの場合、リージョンを 'oss-cn-hangzhou' に設定します。
  region: 'oss-cn-hangzhou',
});


/**
 * バケット内のオブジェクトをページごとにリストします。
 * continuationToken パラメーターを指定して listObjectsV2 メソッドを使用し、オブジェクトをページごとにリストします。
 */
const listObjectsV2WithContinuationToken = async () => {
  try {
    let continuationToken: string | undefined; // ページネーショントークン。最初は空です。
    let isTruncated = true; // リストするオブジェクトがまだあるかどうかを示します。

    // オブジェクトがなくなるまでループしてリストします。
    while (isTruncated) {
      const res = await client.listObjectsV2({
        bucket: 'yourBucketName', // バケット名。ご利用のバケットの名前に置き換えてください。
        continuationToken, // 次の結果ページを取得するために使用されるページネーショントークン。
      });

      // 現在のページのオブジェクトとそのメタデータを出力します。
      console.log(JSON.stringify(res));

      // ページネーションの状態を更新します。
      isTruncated = res.data.isTruncated; // オブジェクトがまだあるかどうかを示します。
      continuationToken = res.data.nextContinuationToken; // 次のページのページネーショントークン。
    }
  } catch (err) {
    // リクエスト中に発生した例外をキャッチします。
    if (err instanceof RequestError) {
      console.log('code: ', err.code); // エラーコード。
      console.log('message: ', err.message); // エラーメッセージ。
      console.log('requestId: ', err.requestId); // リクエスト ID。
      console.log('status: ', err.status); // HTTP ステータスコード。
      console.log('ec: ', err.ec); // エラーコード。
    } else {
      console.log('unknown error: ', err);
    }
  }
};

// listObjectsV2WithContinuationToken 関数を呼び出して、オブジェクトをページごとにリストします。
listObjectsV2WithContinuationToken();

Swift

詳細については、「オブジェクトのリスト (Swift SDK)」をご参照ください。

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)")
        }
    }
}

Ruby

詳細については、「オブジェクトのリスト (Ruby SDK)」をご参照ください。

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # バケットが配置されているリージョンに対応するエンドポイントを設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)

# バケット名を指定します。例: examplebucket。
bucket = client.get_bucket('examplebucket')
# すべてのオブジェクトをリストします。
objects = bucket.list_objects
objects.each { |o| puts o.key }     

Browser.js

詳細については、「オブジェクトのリスト (Browser.js SDK)」をご参照ください。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
  </head>
  <body>
    <script>      
      const client = new OSS({
        // yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、yourRegion を oss-cn-hangzhou に設定します。
        region: "yourRegion",
        authorizationV4: true,
        // Security Token Service (STS) から取得した一時的な AccessKey ペア (AccessKey ID と AccessKey Secret)。
        accessKeyId: 'yourAccessKeyId',
        accessKeySecret: 'yourAccessKeySecret',
        // STS から取得したセキュリティトークン (SecurityToken)。
        stsToken: 'yourSecurityToken',
        // バケット名を指定します。例: examplebucket。
        bucket: "examplebucket",
      });

      async function list(dir) {
        try {
          // デフォルトでは、最大 1,000 個のファイルが返されます。
          let result = await client.list();
          console.log(result);

          // 前回のリスト操作で最後に読み取られたファイルの次のファイルからファイルリストの取得を続行します。
          if (result.isTruncated) {
            result = await client.list({ marker: result.nextMarker });
          }

          // プレフィックス 'ex' を持つファイルをリストします。
          result = await client.list({
            prefix: "ex",
          });
          console.log(result);

          // プレフィックス 'ex' を持ち、名前がアルファベット順で 'example' の後にあるファイルをリストします。
          result = await client.list({
            prefix: "ex",
            marker: "example",
          });
          console.log(result);
        } catch (e) {
          console.log(e);
        }
      }

      list();
    </script>
  </body>
</html>
          

Android

詳細については、「オブジェクトのリスト (Android SDK)」をご参照ください。

private String marker = null;
private boolean isCompleted = false;

// すべてのオブジェクトをページごとにリストします。
public void getAllObject() {
    do {
        OSSAsyncTask task = getObjectList();
        // スレッドをブロックし、リクエストが完了するのを待って NextMarker を取得します。次のページをリクエストするには、marker を前の応答の NextMarker 値に設定します。最初のページには marker を設定する必要はありません。
        // この例では、ループを使用してページごとにデータをリストします。次のページをリクエストする前に、スレッドをブロックしてリクエストが完了するのを待って NextMarker を取得する必要があります。シナリオに基づいてスレッドをブロックするかどうかを決定してください。
        task.waitUntilFinished();
    } while (!isCompleted);
}

// 1 ページ分のオブジェクトをリストします。
public OSSAsyncTask getObjectList() {
    // バケット名を指定します。
    ListObjectsRequest request = new ListObjectsRequest("examplebucket");
    // ページごとに返すオブジェクトの最大数を指定します。このパラメーターを設定しない場合、デフォルト値は 100 です。maxkeys の値は 1,000 を超えることはできません。
    request.setMaxKeys(20);
    request.setMarker(marker);

    OSSAsyncTask task = oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
        @Override
        public void onSuccess(ListObjectsRequest request, ListObjectsResult result) {
            for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
                Log.i("ListObjects", objectSummary.getKey());
            }
            // これが最後のページです。
            if (!result.isTruncated()) {
                isCompleted = true;
                return;
            }
            // 次のリスト操作のマーカー。
            marker = result.getNextMarker();
        }

        @Override
        public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
            isCompleted = true;
            // リクエスト例外。
            if (clientException != null) {
                // クライアント例外、ネットワークエラーなど。
                clientException.printStackTrace();
            }
            if (serviceException != null) {
                // サーバー例外。
                Log.e("ErrorCode", serviceException.getErrorCode());
                Log.e("RequestId", serviceException.getRequestId());
                Log.e("HostId", serviceException.getHostId());
                Log.e("RawMessage", serviceException.getRawMessage());
            }
        }
    });
    return task;
}

C++

詳細については、「オブジェクトのリスト (C++ SDK)」をご参照ください。

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* OSS アカウント情報を初期化します。 */
            
    /* yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
    std::string Region = "yourRegion";
    /* バケット名を指定します。例: examplebucket。 */
    std::string BucketName = "examplebucket";

    /* ネットワークリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    std::string nextMarker = "";
    bool isTruncated = false; 
    do {
        /* オブジェクトをリストします。 */
        ListObjectsRequest request(BucketName);
        request.setMarker(nextMarker);
        auto outcome = client.ListObjects(request);

        if (!outcome.isSuccess()) {    
            /* 例外を処理します。 */
            std::cout << "ListObjects fail" <<
            ",code:" << outcome.error().Code() <<
            ",message:" << outcome.error().Message() <<
            ",requestId:" << outcome.error().RequestId() << std::endl;
            ShutdownSdk();
            return -1;  
        }
        else {
            for (const auto& object : outcome.result().ObjectSummarys()) {
                std::cout << "object"<<
                ",name:" << object.Key() <<
                ",size:" << object.Size() <<
                ",last modified time:" << object.LastModified() << std::endl;
            }      
        }
        nextMarker = outcome.result().NextMarker();
        isTruncated = outcome.result().IsTruncated();
    } while (isTruncated);

    /* ネットワークリソースを解放します。 */
    ShutdownSdk();
    return 0;
}

iOS

詳細については、「オブジェクトのリスト (iOS SDK)」をご参照ください。

 do {
    OSSGetBucketRequest *getBucket = [OSSGetBucketRequest new];
    getBucket.bucketName = @"examplebucket";
    getBucket.marker = _marker;  // _marker インスタンス変数にアクセス
    getBucket.maxKeys = 20;

    OSSTask *getBucketTask = [client getBucket:getBucket];
    [getBucketTask continueWithBlock:^id(OSSTask *task) {
        if (!task.error) {
            OSSGetBucketResult *result = task.result;
            NSLog(@"Get bucket success!");
            NSLog(@"objects: %@", result.contents);
            if (result.isTruncated) {
                _marker = result.nextMarker;  // _marker インスタンス変数を更新
                _isCompleted = NO;
            } else {
                _isCompleted = YES;
            }
        } else {
            _isCompleted = YES;
            NSLog(@"Get bucket failed, error: %@", task.error);
        }
        return nil;
    }];
    // タスクが完了するのを待つために同期ブロッキングを実装します。
    [getBucketTask waitUntilFinished];
} while (!_isCompleted);

C

詳細については、「オブジェクトのリスト (C SDK)」をご参照ください。

#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint をバケットが配置されているリージョンのエンドポイントに置き換えます。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
const char *endpoint = "yourEndpoint";
/* ご利用のバケット名に置き換えます。例: examplebucket。 */
const char *bucket_name = "examplebucket";
/* yourRegion をバケットが配置されているリージョンに置き換えます。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* aos_string_t 型を char* 文字列で初期化します。 */
    aos_str_set(&options->config->endpoint, endpoint);
    /* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // 以下の 2 つの追加パラメーターを設定します。
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* CNAME が使用されるかどうかを指定します。値 0 は CNAME が使用されないことを示します。 */
    options->config->is_cname = 0;
    /* タイムアウト期間などのネットワークパラメーターを設定します。 */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* プログラムエントリで aos_http_io_initialize メソッドを呼び出して、ネットワークやメモリなどのグローバルリソースを初期化します。 */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* メモリ管理のためのメモリプール。apr_pool_t と同等です。実装コードは apr ライブラリにあります。 */
    aos_pool_t *pool;
    /* 新しいメモリプールを作成します。2 番目のパラメーターは NULL で、新しいメモリプールが他のメモリプールから継承しないことを示します。 */
    aos_pool_create(&pool, NULL);
    /* オプションを作成して初期化します。このパラメーターには、endpoint、access_key_id、access_key_secret、is_cname、curl などのグローバル設定が含まれます。 */
    oss_request_options_t *oss_client_options;
    /* メモリプール内のオプションにメモリを割り当てます。 */
    oss_client_options = oss_request_options_create(pool);
    /* クライアントオプション oss_client_options を初期化します。 */
    init_options(oss_client_options);
    /* パラメーターを初期化します。 */
    aos_string_t bucket;
    aos_status_t *resp_status = NULL; 
    oss_list_object_params_t *params = NULL;
    oss_list_object_content_t *content = NULL;
    int size = 0;
    char *line = NULL;
    char *prefix = "";
    char *nextMarker = "";
    aos_str_set(&bucket, bucket_name);
    params = oss_create_list_object_params(pool);
    /* max_ret パラメーターを使用して、返すオブジェクトの数を設定します。 */
    /* デフォルトでは、最大 1,000 個のオブジェクトをリストできます。リストするオブジェクトの数が 1,000 を超える場合、アルファベット順で最初の 1,000 個のオブジェクトのみが返されます。応答の truncated 値は true になり、next_marker 値が次の読み取り操作の開始点として返されます。 */
    params->max_ret = 100;
    aos_str_set(&params->prefix, prefix);
    aos_str_set(&params->marker, nextMarker);
    printf("Object\tSize\tLastModified\n");
    /* すべてのオブジェクトをリストします。 */
    do {
        resp_status = oss_list_object(oss_client_options, &bucket, params, NULL);
        if (!aos_status_is_ok(resp_status))
        {
            printf("list object failed\n");
            break;
        }
        aos_list_for_each_entry(oss_list_object_content_t, content, &params->object_list, node) {
            ++size;
            line = apr_psprintf(pool, "%.*s\t%.*s\t%.*s\n", content->key.len, content->key.data, 
                content->size.len, content->size.data, 
                content->last_modified.len, content->last_modified.data);
            printf("%s", line);
        }
        nextMarker = apr_psprintf(pool, "%.*s", params->next_marker.len, params->next_marker.data);
        aos_str_set(&params->marker, nextMarker);
        aos_list_init(&params->object_list);
        aos_list_init(&params->common_prefix_list);
    } while (params->truncated == AOS_TRUE);
    printf("Total %d\n", size);
    /* メモリプールを解放します。これにより、リクエスト中にさまざまなリソースに割り当てられたメモリが解放されます。 */
    aos_pool_destroy(pool);
    /* 以前に割り当てられたグローバルリソースを解放します。 */
    aos_http_io_deinitialize();
    return 0;
}

ossutil

次の例は、バケット examplebucket 内の各 object に関する情報をリストする方法を示しています。

ossutil api list-objects-v2 --bucket examplebucket

詳細については、「list-objects-v2 (get-bucket-v2)」をご参照ください。

OSS コンソール

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケット をクリックします。

  3. 対象のバケットに移動し、オブジェクト管理 > オブジェクト をクリックします。

    このページには、バケット内のすべてのオブジェクトがリストされます。デフォルトでは、1 ページあたり 50 オブジェクトが表示され、最大 500 まで設定できます。

特定のディレクトリ内のすべてのオブジェクトのリスト

ディレクトリ内のすべてのオブジェクト (すべてのサブディレクトリを含む) のフラットリストを取得するには、prefix パラメーターを設定します。

prefix パラメーターはプレフィックスでフィルター処理を行い、キー (Key) が指定された文字列で始まるすべてのオブジェクトを返します。OSS は物理的なディレクトリのないフラットなストレージ構造を使用しているため、このフィルターは論理ディレクトリからすべてのコンテンツを効果的に取得します。

SDK

Java

完全なサンプルコードについては、「オブジェクトのリスト (Java SDK V1)」をご参照ください。

// ...

// 主要なコード: プレフィックスを設定します。
ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
listObjectsV2Request.setPrefix("images/");  // プレフィックスを指定します。
ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);

// ...

Python

完全なサンプルコードについては、「オブジェクトのリスト (Python SDK V2)」をご参照ください。

# ...

# 主要なコード: prefix パラメーターを設定します。
for page in paginator.iter_page(oss.ListObjectsV2Request(
    bucket='your-bucket',
    prefix='images/'  # プレフィックスを指定します。
)):
# ...

Go

完全なサンプルコードについては、「オブジェクトのリスト (Go SDK V2)」をご参照ください。

// ...
// 主要なコード: プレフィックスを設定します。
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
Prefix: oss.Ptr("images/"), // 指定されたプレフィックスを持つすべてのオブジェクトをリストします。
}
// ...

Node.js

完全なサンプルコードについては、「オブジェクトのリスト (Node.js)」をご参照ください。

// ...

// 主要なコード: プレフィックスを設定します。
const result = await client.listV2({
    prefix: 'images/'  // プレフィックスを指定します。
});

// ...

Harmony

完全なサンプルコードについては、「オブジェクトのリスト (Harmony SDK)」をご参照ください。

// ...

// 主要なコード: プレフィックスを設定します。
const res = await client.listObjectsV2({
    bucket: 'yourBucketName',
    prefix: 'images/',  // プレフィックスを指定します。
});

// ...

Ruby

完全なサンプルコードについては、「オブジェクトのリスト (Ruby SDK)」をご参照ください。

# ...

# 主要なコード: プレフィックスを設定します。
objects = bucket.list_objects(:prefix => 'images/')  # プレフィックスを指定します。

# ...

Android

完全なサンプルコードについては、「オブジェクトのリスト (Android SDK)」をご参照ください。

// ...

// 主要なコード: プレフィックスを設定します。
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
request.setPrefix("images/");  // プレフィックスを指定します。

// ...

C++

完全なサンプルコードについては、「オブジェクトのリスト (C++ SDK)」をご参照ください。

// ...

// 主要なコード: プレフィックスを設定します。
ListObjectsRequest request(BucketName);
request.setPrefix("images/");  // プレフィックスを指定します。

// ...

iOS

完全なサンプルコードについては、「オブジェクトのリスト (iOS SDK)」をご参照ください。

// ...

// 主要なコード: プレフィックスを設定します。
getBucket.prefix = @"images/";  // プレフィックスを指定します。

// ...

C

完全なサンプルコードについては、「オブジェクトのリスト (C SDK)」をご参照ください。

// ...

// 主要なコード: プレフィックスを設定します。
char *prefix = "images/";  // プレフィックスを指定します。
aos_str_set(&params->prefix, prefix);

// ...

ossutil

次の例は、バケット examplebucket 内で、指定されたプレフィックス dir を持つすべての Object に関する情報をリストする方法を示しています。

ossutil api list-objects-v2 --bucket examplebucket --prefix dir/

使用方法の詳細については、「list-objects-v2 (get-bucket-v2)」をご参照ください。

出力例

バケットに次のオブジェクトが含まれていると仮定します。

images/cat.jpg
images/dog.png
images/archive/old.zip
readme.txt

prefix="images/" を指定したリクエストは、次を返します。

images/
images/archive/
images/archive/old.zip
images/cat.jpg
images/dog.png

直下のオブジェクトと共通プレフィックスのリスト

delimiter パラメーター (通常は /) を prefix と共に指定すると、結果は objectscommon prefixes の 2 つのグループに分割されます。

delimiter パラメーターは結果を階層ごとにグループ化します。OSS は prefix でフィルターされた結果を次のように処理します。

  • オブジェクトキーに prefix の後に / デリミタが含まれていない場合、それはオブジェクトとしてリストされます。

  • オブジェクト名に prefix の後に / が含まれている場合、名前の先頭から最初の / までの部分が共通プレフィックスと見なされます。

SDK

Java

完全なサンプルコードについては、「オブジェクトのリスト (Java SDK V1)」をご参照ください。

// ...

// 主要なコード: デリミタを設定します。
ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
listObjectsV2Request.setPrefix("images/");  // ディレクトリを指定します。
listObjectsV2Request.setDelimiter("/");     // デリミタを設定します。
ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);

// 現在のディレクトリ内のオブジェクトを反復処理します。
for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
    System.out.println("Object: " + objectSummary.getKey());
}

// 共通プレフィックスを反復処理します。
for (String commonPrefix : result.getCommonPrefixes()) {
    System.out.println("Subdirectory: " + commonPrefix);
}

// ...

Python

完全なサンプルコードについては、「オブジェクトのリスト (Python SDK V2)」をご参照ください。

# ...

# 主要なコード: delimiter パラメーターを追加します。
for page in paginator.iter_page(oss.ListObjectsV2Request(
    bucket=args.bucket,
    prefix="images/",  # ディレクトリを指定します。
    delimiter="/",     # デリミタを設定します。
)):
    # 現在のディレクトリ内のオブジェクトを反復処理します。
    for file in page.contents:
        print(f'Object: {file.key}')
    
    # 共通プレフィックスを反復処理します。
    for prefix in page.common_prefixes:
        print(f'Subdirectory: {prefix.prefix}')

# ...

Go

// ...

// 主要なコード: デリミタを設定します。
request := &oss.ListObjectsV2Request{
    Bucket:    oss.Ptr(bucketName),
    Prefix:    oss.Ptr("images/"),  // ディレクトリを指定します。
    Delimiter: oss.Ptr("/"),        // デリミタを設定します。
}

// 現在のディレクトリ内のオブジェクトを反復処理します。
for _, obj := range lsRes.Contents {
    log.Printf("Object: %v\n", oss.ToString(obj.Key))
}

// 共通プレフィックスを反復処理します。
for _, prefix := range lsRes.CommonPrefixes {
    log.Printf("Subdirectory: %v\n", *prefix.Prefix)
}

// ...

PHP

完全なサンプルコードについては、「オブジェクトのリスト (PHP SDK V2)」をご参照ください。

// ...

// 主要なコード: ページネーターを作成し、デリミタを設定してオブジェクトと共通プレフィックスを区別します。
$paginator = new Oss\Paginator\ListObjectsV2Paginator(client: $client);
$iter = $paginator->iterPage(new Oss\Models\ListObjectsV2Request(
    bucket: $bucket,
    prefix: "",
    delimiter: "/"
));

// ページ分割された結果を反復処理します。
foreach ($iter as $page) {
    // contents を反復処理して、現在のディレクトリ内のオブジェクトを取得します。
    foreach ($page->contents ?? [] as $object) {
        echo "Object: " . $object->key . PHP_EOL;
    }

    // commonPrefixes を反復処理して、サブディレクトリを取得します。
    foreach ($page->commonPrefixes ?? [] as $prefixObject) {
        echo "Subdirectory: " . $prefixObject->prefix . PHP_EOL;
    }
}

// ...

Node.js

完全なサンプルコードについては、「オブジェクトのリスト (Node.js)」をご参照ください。

// ...
// 主要なコード: デリミタを設定します。
const result = await client.listV2({
prefix: dir, // ディレクトリを指定します。
delimiter: '/' // デリミタを設定します。
});
// 現在のディレクトリ内のオブジェクトを反復処理します。
if (result && result.objects) {
result.objects.forEach(obj => {
console.log('Object: %s', obj.name);
});
}
// 共通プレフィックスを反復処理します。
if (result && result.prefixes) {
result.prefixes.forEach(subDir => {
console.log('Subdirectory: %s', subDir);
});
}
// ...

Harmony

完全なサンプルコードについては、「オブジェクトのリスト (Harmony SDK)」をご参照ください。

// ...
// 主要なコード: デリミタを設定します。
const res = await client.listObjectsV2({
bucket: 'yourBucketName', // バケット名
prefix: 'images/', // ディレクトリを指定します。
delimiter: '/', // デリミタを設定します。
});
// 現在のディレクトリ内のオブジェクトを反復処理します。
if (res && res.objects) {
res.objects.forEach(obj => {
console.log('Object:', obj.name);
});
}
// 共通プレフィックスを反復処理します。
if (res && res.prefixes) {
res.prefixes.forEach(subDir => {
console.log('Subdirectory:', subDir);
});
}
// ...

Browser.js

完全なサンプルコードについては、「オブジェクトのリスト (Browser.js SDK)」をご参照ください。

// ...
// 主要なコード: デリミタを設定します。
let result = await client.list({
prefix: 'images/', // ディレクトリを指定します。
delimiter: "/", // デリミタを設定します。
});
// 現在のディレクトリ内のオブジェクトを反復処理します。
result.objects.forEach(function (obj) {
console.log("Object: %s", obj.name);
});
// 共通プレフィックスを反復処理します。
result.prefixes.forEach(function (subDir) {
console.log("Subdirectory: %s", subDir);
});
// ...

Ruby

完全なサンプルコードについては、「オブジェクトのリスト (Ruby SDK)」をご参照ください。

# ...
# 主要なコード: デリミタを設定します。
objects = bucket.list_objects(prefix: 'images/', delimiter: '/')
# 現在のディレクトリ内のオブジェクトを反復処理します。
if obj.is_a?(Aliyun::OSS::Object)
puts "Object: #{obj.key}"
end
# 共通プレフィックスを反復処理します。
if obj.is_a?(String) # Common Prefix
puts "Subdirectory: #{obj}"
end
# ...

C++

完全なサンプルコードについては、「オブジェクトのリスト (C++ SDK)」をご参照ください。

// ...
// 主要なコード: デリミタを設定します。
ListObjectsRequest request(BucketName);
request.setPrefix("images/"); // ディレクトリを指定します。
request.setDelimiter("/"); // デリミタを設定します。
// 現在のディレクトリ内のオブジェクトを反復処理します。
for (const auto& object : outcome.result().ObjectSummarys()) {
std::cout << "Object:" << object.Key() << std::endl;
}
// 共通プレフィックスを反復処理します。
for (const auto& commonPrefix : outcome.result().CommonPrefixes()) {
std::cout << "Subdirectory:" << commonPrefix << std::endl;
}
// ...

C

完全なサンプルコードについては、「オブジェクトのリスト (C SDK)」をご参照ください。

// ...
// 主要なコード: デリミタを設定します。
params = oss_create_list_object_params(pool);
aos_str_set(&params->prefix, "images/"); // ディレクトリを指定します。
aos_str_set(&params->delimiter, "/"); // デリミタを設定します。
// 現在のディレクトリ内のオブジェクトを反復処理します。
aos_list_for_each_entry(oss_list_object_content_t, content, &params->object_list, node) {
printf("Object: %.*s\n", content->key.len, content->key.data);
}
// 共通プレフィックスを反復処理します。
aos_list_for_each_entry(oss_list_object_common_prefix_t, commonPrefix, &params->common_prefix_list, node) {
printf("Subdirectory: %.*s\n", commonPrefix->prefix.len, commonPrefix->prefix.data);
}
// ...

ossutil

次の例は、examplebucket バケットの現在のディレクトリにある Object 情報をリストする方法を示しています。

ossutil api list-objects-v2 --bucket examplebucket --prefix images/ --delimiter /

使用方法の詳細については、「list-objects-v2 (get-bucket-v2)」をご参照ください。

出力例

prefix="images/"delimiter="/" の両方を設定すると、結果は次のようにグループ化されます。

Objects:
images/
images/cat.jpg
images/dog.png
Common Prefixes:
images/archive/

特定のキー以降のオブジェクトのリスト

startAfter パラメーター (一部の古い SDK では marker) を使用して、指定されたキーの辞書順で後続するオブジェクトをリストします。

SDK

Java

完全なサンプルコードについては、「オブジェクトのリスト (Java SDK V1)」をご参照ください。

// ...

// 主要なコード: 開始位置を設定します。
ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
listObjectsV2Request.setStartAfter("images/cat.jpg");  // 指定されたオブジェクトの後にリストを開始します。
ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);

// ...

Python

完全なサンプルコードについては、「オブジェクトのリスト (Python SDK V2)」をご参照ください。

# ...

# 主要なコード: start_after パラメーターを追加します。
for page in paginator.iter_page(oss.ListObjectsV2Request(
    bucket=args.bucket,
    start_after="images/cat.jpg",  // 指定されたオブジェクトの後にリストを開始します。
)):

# ...

Go

完全なサンプルコードについては、「オブジェクトのリスト (Go SDK V2)」をご参照ください。

// ...

// 主要なコード: 開始位置を設定します。
request := &oss.ListObjectsV2Request{
    Bucket:     oss.Ptr(bucketName),
    StartAfter: oss.Ptr("images/cat.jpg"),  // 指定されたオブジェクトの後にリストを開始します。
}

// ...

PHP

完全なサンプルコードについては、「オブジェクトのリスト (PHP SDK V2)」をご参照ください。

// ...
// 主要なコード: 開始位置を設定します。
$paginator = new Oss\Paginator\ListObjectsV2Paginator(client: $client);
$iter = $paginator->iterPage(new Oss\Models\ListObjectsV2Request(
bucket: $bucket,
startAfter:"images/cat.jpg", // 指定されたオブジェクトの後にリストを開始します。
));
// ...

Ruby

完全なサンプルコードについては、「オブジェクトのリスト (Ruby SDK)」をご参照ください。

# ...

# 主要なコード: マーカー (開始位置) を設定します。
objects = bucket.list_objects(:marker => 'images/cat.jpg')  // 指定されたオブジェクトの後にリストを開始します。

# ...

Android

完全なサンプルコードについては、「オブジェクトのリスト (Android SDK)」をご参照ください。

// ...

// 主要なコード: マーカー (開始位置) を設定します。
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
request.setMarker("images/cat.jpg");  // 指定されたオブジェクトの後にリストを開始します。

// ...

C++

完全なサンプルコードについては、「オブジェクトのリスト (C++ SDK)」をご参照ください。

// ...

// 主要なコード: マーカー (開始位置) を設定します。
ListObjectsRequest request(BucketName);
request.setMarker("images/cat.jpg");  // 指定されたオブジェクトの後にリストを開始します。

// ...

iOS

完全なサンプルコードについては、「オブジェクトのリスト (iOS SDK)」をご参照ください。

// ...

// 主要なコード: マーカー (開始位置) を設定します。
getBucket.marker = @"images/cat.jpg";  // 指定されたオブジェクトの後にリストを開始します。

// ...

C

完全なサンプルコードについては、「オブジェクトのリスト (C SDK)」をご参照ください。

// ...

// 主要なコード: マーカー (開始位置) を設定します。
char *nextMarker = "images/cat.jpg";  // 指定されたオブジェクトの後にリストを開始します。
aos_str_set(&params->marker, nextMarker);

// ...

ossutil

次の例は、examplebucket バケット内の test.txt の後にある Object の情報をリストする方法を示しています。

ossutil api list-objects-v2 --bucket examplebucket --start-after test.txt

詳細については、「list-objects-v2 (get-bucket-v2)」をご参照ください。

出力例:

バケットに次のオブジェクトが含まれていると仮定します。

images/cat.jpg
images/dog.png
images/archive/old.zip
readme.txt

start_after="images/cat.jpg" を設定すると、出力には "images/cat.jpg" の辞書順で後続するオブジェクトのみが含まれます。

images/dog.png
readme.txt

ページごとのオブジェクト数の調整

max-keys パラメーターは、1 回のリクエストで返されるオブジェクトの数を制御します。デフォルト値は 100 で、最大値は 1,000 です。

OSS SDK

Java

完全なサンプルコードについては、「オブジェクトのリスト (Java SDK V1)」をご参照ください。

// ...

// 主要なコード: ページごとに返すオブジェクトの最大数を設定します。
ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
listObjectsV2Request.setMaxKeys(1000);  // 1 ページあたり最大 1,000 オブジェクト。
ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);

// ...

Python

完全なサンプルコードについては、「オブジェクトのリスト (Python SDK V2)」をご参照ください。

# ...

# 主要なコード: ページごとに返すオブジェクトの最大数を設定します。
for page in paginator.iter_page(oss.ListObjectsV2Request(
    bucket=args.bucket,
    max_keys=1000,  // 1 ページあたり最大 1,000 オブジェクト。
)):

# ...

Go

完全なサンプルコードについては、「オブジェクトを一覧表示する (Go SDK V2)」をご参照ください。

// ...

// キーコード: 1ページあたりに返されるオブジェクトの最大数を設定します。
request := &oss.ListObjectsV2Request{
    Bucket:  oss.Ptr(bucketName),
    MaxKeys: 1000,  // ページあたり最大 1,000 個のオブジェクト。
}

// ...

PHP

完全なサンプルコードについては、「オブジェクトのリスト (PHP SDK V2)」をご参照ください。

// ...

// 主要なコード: ページごとに返すオブジェクトの最大数を設定します。
$paginator = new Oss\Paginator\ListObjectsV2Paginator(client: $client);
$iter = $paginator->iterPage(new Oss\Models\ListObjectsV2Request(
                bucket: $bucket,
                maxKeys: 10, // 1 ページあたり最大 10 オブジェクト。
            ));

// ...

Node.js

完全なサンプルコードについては、「オブジェクトのリスト (Node.js)」をご参照ください。

// ...

// 主要なコード: ページごとに返すオブジェクトの最大数を設定します。
const result = await client.listV2({
    "max-keys": 1000  // 1 ページあたり最大 1,000 オブジェクト。
});

// ...

Android

完全なサンプルコードについては、「オブジェクトのリスト (Android SDK)」をご参照ください。

// ...

// 主要なコード: ページごとに返すオブジェクトの最大数を設定します。
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
request.setMaxKeys(1000);  // 1 ページあたり最大 1,000 オブジェクト。

// ...

C++

完全なサンプルコードについては、「オブジェクトのリスト (C++ SDK)」をご参照ください。

// ...

// 主要なコード: ページごとに返すオブジェクトの最大数を設定します。
ListObjectsRequest request(BucketName);
request.setMaxKeys(1000);  // 1 ページあたり最大 1,000 オブジェクト。

// ...

iOS

完全なサンプルコードについては、「オブジェクトのリスト (iOS SDK)」をご参照ください。

// ...

// 主要なコード: ページごとに返すオブジェクトの最大数を設定します。
getBucket.maxKeys = 1000;  // 1 ページあたり最大 1,000 オブジェクト。

// ...

C

完全なサンプルコードについては、「オブジェクトのリスト (C SDK)」をご参照ください。

// ...

// 主要なコード: ページごとに返すオブジェクトの最大数を設定します。
params->max_ret = 1000;  // 1 ページあたり最大 1,000 オブジェクト。

// ...

ossutil

次の例では、examplebucket バケット内でプレフィックス dir/ を持つ最大 100 個の object をリストします。

ossutil api list-objects-v2 --bucket examplebucket --prefix dir/ --max-keys 100

詳細については、「list-objects-v2 (get-bucket-v2)」をご参照ください。

出力例

バケットに次のオブジェクトが含まれていると仮定します。

images/cat.jpg
images/dog.png
images/archive/old.zip
readme.txt
  • maxKeys が 2 に設定されている場合、すべてのオブジェクトは 1 ページあたり 2 オブジェクトのページ分割形式で返されます。

    image

  • maxKeys が 100 に設定されている場合、すべてのオブジェクトは 100 ページ単位で返されます。

    image

本番運用時の注意点

パフォーマンスの最適化

  • ページサイズを増やす: ネットワーク状態が良い場合、MaxKey を 1000 に設定すると API 呼び出しの数を大幅に削減できます。ただし、メモリ使用量に注意し、一度に多くのデータをロードしすぎないようにしてください。

  • プレフィックスを並列処理する: 数十万以上のオブジェクトがある場合、順次リスト表示は遅くなる可能性があります。リスト表示の速度を向上させるには、images/documents/logs/ のように異なるプレフィックスを並列処理します。

  • ディレクトリ構造をキャッシュする: 変更が少ないディレクトリ構造の場合、リスト結果をキャッシュして冗長な API 呼び出しを減らします。

コスト管理

  • 頻繁なフルスキャンを避ける: すべてのオブジェクトを定期的にリスト表示するとコストがかかる可能性があります。以下のよりコスト効率の高い代替案を検討してください。

    • スケジュールに基づいて完全なオブジェクトマニフェストを生成するには、より低コストのインベントリ機能を使用します。このアプローチは、定期的で大規模な分析に最適です。

    • オブジェクトのアップロードや削除にリアルタイムで対応するには、イベント通知を使用します。この方法は、オブジェクトをリスト表示して変更をポーリングするよりも効率的でコスト効果が高いです。

  • ページネーションを適切に設定する: ページサイズが小さいと API 呼び出しの数が増え、大きいとリクエストごとの処理時間とメモリ使用量が増加します。

クォータと制限

  • 応答ごとの最大アイテム数: 各リクエストは最大 1,000 オブジェクトを返すことができます。

  • ソート方法: オブジェクトキーによる辞書順ソートのみがサポートされています。

よくある質問

ページ番号でオブジェクトをリストできますか?

いいえ。

ディレクトリ内のすべてのオブジェクトをリストできますか?

特定のディレクトリ内のすべてのオブジェクト (ディレクトリ構造とオブジェクト名を含む) をリストするには、ossutil 2.0 コマンドラインツールの list-objects-v2 (get-bucket-v2) コマンドを使用します。

最終更新日時でオブジェクトをソートできますか?

いいえ。最終更新日時でオブジェクトをソートする必要がある場合は、データインデックス機能を使用してください。