バケット内のオブジェクトは、デフォルトで辞書順にソートされます。すべてのオブジェクトをリストしたり、ディレクトリ別にオブジェクトをリストしたり、ページごとに返されるオブジェクトの数を調整したりできます。
すべてのオブジェクトをリストする
OSS SDK の使用
Java
詳細については、「オブジェクトのリスト (Java SDK)」をご参照ください。
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)
# 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定する --endpoint パラメーターを指定します。このコマンドラインパラメーターはオプションです。
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(®ion, "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
// 依存ライブラリをロードするために autoload ファイルを導入します。
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 シークレットを取得します。
$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();
// ID 検証のために資格情報を取得するために環境変数を明示的に使用するように設定します (フォーマット: 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
詳細については、「オブジェクトのリスト」をご参照ください。
import Client, { RequestError } from '@aliyun/oss';
// OSSClient インスタンスを作成します。
const client = new Client({
// RAM ユーザーの AccessKey ID を指定します。
accessKeyId: 'yourAccessKeyId',
// RAM ユーザーの AccessKey シークレットを指定します。
accessKeySecret: 'yourAccessKeySecret',
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
region: 'oss-cn-hangzhou',
});
/**
* バケット内のオブジェクトをページごとにリストします。
* listObjectsV2 メソッドを使用し、continuationToken パラメーターを指定してオブジェクトをページごとにリストします。
*/
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); // EC。
} else {
console.log('unknown error: ', err);
}
}
};
// listObjectsV2WithContinuationToken 関数を呼び出して、ページごとにオブジェクトをリストします。
listObjectsV2WithContinuationToken();
Swift
詳細については、「オブジェクトのリスト」をご参照ください。
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
詳細については、「オブジェクトのリスト」をご参照ください。
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
詳細については、「オブジェクトのリスト」をご参照ください。
<!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({
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
region: "yourRegion",
authorizationV4: true,
// STS から取得した一時的な AccessKey ペアを指定します。AccessKey ペアは、AccessKey ID と AccessKey シークレットで構成されます。
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret',
// STS から取得したセキュリティトークンを指定します。
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
詳細については、「オブジェクトのリスト」をご参照ください。
private String marker = null;
private boolean isCompleted = false;
// バケット内のすべてのオブジェクトをページごとにリストします。
public void getAllObject() {
do {
OSSAsyncTask task = getObjectList();
// 前のリクエストに対して NextMarker が返されるまで待ちます。現在のリクエストの marker パラメーターを、前のリクエストの応答で返された NextMarker の値に設定します。最初のリクエストでは marker を設定する必要はありません。
// この例では、ループを使用してページごとにオブジェクトをリストします。したがって、リクエストは前のリクエストの NextMarker 値が返された後にのみ送信できます。前のリクエストに対して返された NextMarker 値を待つかどうかを決定できます。
task.waitUntilFinished();
} while (!isCompleted);
}
// ページ上のオブジェクトをリストします。
public OSSAsyncTask getObjectList() {
// バケットの名前を指定します。
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// 各ページにリストできるオブジェクトの最大数を指定します。このパラメーターを指定しない場合、最大 100 個のオブジェクトが返されます。MaxKeys に指定できる最大値は 1000 です。
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++
詳細については、「オブジェクトのリスト」をご参照ください。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS へのアクセスに使用されるアカウントに関する情報を初期化します。 */
/* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
std::string Endpoint = "yourEndpoint";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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() <<
",lastmodify time:" << object.LastModified() << std::endl;
}
}
nextMarker = outcome.result().NextMarker();
isTruncated = outcome.result().IsTruncated();
} while (isTruncated);
/* ネットワークリソースなどのリソースを解放します。 */
ShutdownSdk();
return 0;
}iOS
詳細については、「オブジェクトのリスト」をご参照ください。
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
詳細については、「オブジェクトのリスト」をご参照ください。
#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
const char *endpoint = "yourEndpoint";
/* バケットの名前を指定します。例: examplebucket。 */
const char *bucket_name = "examplebucket";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* char* 文字列を使用して aos_string_t 型のデータを初期化します。 */
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[])
{
/* main() で aos_http_io_initialize メソッドを呼び出して、ネットワークリソースやメモリリソースなどのグローバルリソースを初期化します。 */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* メモリを管理するためのメモリプールを作成します。aos_pool_t は 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(¶ms->prefix, prefix);
aos_str_set(¶ms->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, ¶ms->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(¶ms->marker, nextMarker);
aos_list_init(¶ms->object_list);
aos_list_init(¶ms->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 内のすべての オブジェクト の情報を一覧表示する方法を示します。
ossutil api list-objects-v2 --bucket examplebucket詳細については、「list-objects-v2 (get-bucket-v2)」をご参照ください。
OSS コンソールの使用
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケット をクリックします。
宛先バケットに移動し、[オブジェクト管理] > [オブジェクト] をクリックします。
このページには、バケット内のすべてのオブジェクトがページ分割されたリストで表示されます。デフォルトでは、コンソールはページごとに 50 個のオブジェクトを表示し、最大 500 個です。
特定のディレクトリ内のすべてのオブジェクトをリストする
サブディレクトリを含むディレクトリ内のすべてのオブジェクトのフラットリストを取得するには、prefix パラメーターを設定します。
prefix パラメーターは、Keys が指定された文字列で始まるオブジェクトのみを含む、フィルター処理されたオブジェクトのリストを返します。OSS は物理的なフォルダーのないフラットなストレージ構造を利用しているため、この単純なフィルタリングメカニズムはディレクトリの走査を効果的にエミュレートし、論理フォルダー内のすべてのオブジェクトを取得できます。
OSS SDK の使用
Java
完全なサンプルコードについては、「オブジェクトのリスト (Java SDK)」をご参照ください。
// ...
// キーコード: プレフィックスを設定します。
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
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: プレフィックスを設定します。
const res = await client.listObjectsV2({
bucket: 'yourBucketName',
prefix: 'images/', // プレフィックスを指定します。
});
// ...Ruby
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
# ...
# キーコード: プレフィックスを設定します。
objects = bucket.list_objects(:prefix => 'images/') # プレフィックスを指定します。
# ...Android
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: プレフィックスを設定します。
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
request.setPrefix("images/"); // プレフィックスを指定します。
// ...C++
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: プレフィックスを設定します。
ListObjectsRequest request(BucketName);
request.setPrefix("images/"); // プレフィックスを指定します。
// ...iOS
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: プレフィックスを設定します。
getBucket.prefix = @"images/"; // プレフィックスを指定します。
// ...C
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: プレフィックスを設定します。
char *prefix = "images/"; // プレフィックスを指定します。
aos_str_set(¶ms->prefix, prefix);
// ...ossutil の使用
次の例は、examplebucket 内のプレフィックス dir/ を持つすべての オブジェクトに関する情報をリストする方法を示しています。
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特定のディレクトリ内の直接のオブジェクトとサブディレクトリをリストする
prefix パラメーターとともに delimiter パラメーター (通常は / に設定) を追加することで、結果を Objects と CommonPrefixes (サブディレクトリ) の 2 つの部分に分割できます。
delimiter パラメーターは、オブジェクトを階層ごとにグループ化します。これが存在する場合、OSS は prefix によってフィルター処理された結果を第 2 ステップで処理します:
prefixの後に/を含まないキーは、Objectsリストで返されます。prefixの後に/を含むキーはグループ化されます。キーの先頭から最初の/の出現までの部分が、CommonPrefixesリストで返されます。
OSS SDK の使用
Java
完全なサンプルコードについては、「オブジェクトのリスト (Java SDK)」をご参照ください。
// ...
// キーコード: 区切り文字を設定します。
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
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: 区切り文字を設定します。
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
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: 区切り文字を設定します。
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
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: 区切り文字を設定します。
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++
完全なサンプルコードは、「オブジェクトの一覧表示」をご参照ください。
// ...
// キーコード: 区切り文字を設定します。
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
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: 区切り文字を設定します。
params = oss_create_list_object_params(pool);
aos_str_set(¶ms->prefix, "images/"); // ディレクトリを指定します。
aos_str_set(¶ms->delimiter, "/"); // 区切り文字を設定します。
// 現在のディレクトリ内のオブジェクトを走査します。
aos_list_for_each_entry(oss_list_object_content_t, content, ¶ms->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, ¶ms->common_prefix_list, node) {
printf("Subdirectory: %.*s\n", commonPrefix->prefix.len, commonPrefix->prefix.data);
}
// ...ossutil の使用
次の例は、examplebucket の images/ ディレクトリ内の直接のオブジェクトとサブディレクトリをリストする方法を示しています。
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
Directories:
images/archive/指定された位置の後にオブジェクトをリストする
startAfter パラメーター (または一部の古い SDK では marker) を使用して、辞書順で指定されたキーの前に現れるすべてのオブジェクトキーをスキップします。
OSS SDK の使用
Java
完全なサンプルコードについては、「オブジェクトのリスト (Java SDK)」をご参照ください。
// ...
// キーコード: 開始位置を設定します。
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
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
# ...
# キーコード: マーカー (開始位置) を設定します。
objects = bucket.list_objects(:marker => 'images/cat.jpg') # 指定されたオブジェクトの後にリストを開始します。
# ...Android
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: マーカー (開始位置) を設定します。
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
request.setMarker("images/cat.jpg"); // 指定されたオブジェクトの後にリストを開始します。
// ...C++
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: マーカー (開始位置) を設定します。
ListObjectsRequest request(BucketName);
request.setMarker("images/cat.jpg"); // 指定されたオブジェクトの後にリストを開始します。
// ...iOS
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: マーカー (開始位置) を設定します。
getBucket.marker = @"images/cat.jpg"; // 指定されたオブジェクトの後にリストを開始します。
// ...C
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: マーカー (開始位置) を設定します。
char *nextMarker = "images/cat.jpg"; // 指定されたオブジェクトの後にリストを開始します。
aos_str_set(¶ms->marker, nextMarker);
// ...ossutil の使用
次の例は、examplebucket 内で test.txt の後に現れる オブジェクトに関する情報をリストする方法を示しています。
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.txtstart-after="images/cat.jpg" を設定すると、出力には "images/cat.jpg" や辞書順でそれ以前のオブジェクトは含まれません:
images/dog.png
readme.txtページあたりのオブジェクト数を調整する
MaxKey パラメーターは、単一のリクエストで返されるオブジェクトの数を制御します。デフォルト値は 100 で、最大値は 1,000 です。
OSS SDK の使用
Java
完全なサンプルコードについては、「オブジェクトのリスト (Java SDK)」をご参照ください。
// ...
// キーコード: max_keys パラメーターを追加して、ページあたりのオブジェクト数を設定します。
ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
listObjectsV2Request.setMaxKeys(1000); // ページあたりの最大オブジェクト数を 1000 に設定します。
ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
// ...Python
完全なサンプルコードについては、「オブジェクトのリスト (Python SDK V2)」をご参照ください。
# ...
# キーコード: max_keys パラメーターを追加して、ページあたりのオブジェクト数を設定します。
for page in paginator.iter_page(oss.ListObjectsV2Request(
bucket=args.bucket,
max_keys=1000, # ページあたりの最大オブジェクト数を 1000 に設定します。
)):
# ...Go
完全なサンプルコードについては、「オブジェクトのリスト (Go SDK V2)」をご参照ください。
// ...
// キーコード: max_keys パラメーターを追加して、ページあたりのオブジェクト数を設定します。
request := &oss.ListObjectsV2Request{
Bucket: oss.Ptr(bucketName),
MaxKeys: 1000, // ページあたりの最大オブジェクト数を 1000 に設定します。
}
// ...PHP
完全なサンプルコードについては、「オブジェクトのリスト (PHP SDK V2)」をご参照ください。
// ...
// キーコード: ページネーターを作成し、maxKeys パラメーターを使用してページごとに返されるオブジェクトの最大数を設定します。
$paginator = new Oss\Paginator\ListObjectsV2Paginator(client: $client);
$iter = $paginator->iterPage(new Oss\Models\ListObjectsV2Request(
bucket: $bucket,
maxKeys: 10, //各リストで返されるオブジェクトの最大数。
));
// ...Node.js
完全なサンプルコードについては、「オブジェクトのリスト (Node.js)」をご参照ください。
// ...
// キーコード: max_keys パラメーターを追加して、ページあたりのオブジェクト数を設定します。
const result = await client.listV2({
"max-keys": 1000 // ページあたりの最大オブジェクト数を 1000 に設定します。
});
// ...Android
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: max_keys パラメーターを追加して、ページあたりのオブジェクト数を設定します。
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
request.setMaxKeys(1000); // ページあたりの最大オブジェクト数を 1000 に設定します。
// ...C++
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: max_keys パラメーターを追加して、ページあたりのオブジェクト数を設定します。
ListObjectsRequest request(BucketName);
request.setMaxKeys(1000); // ページあたりの最大オブジェクト数を 1000 に設定します。
// ...iOS
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: max_keys パラメーターを追加して、ページあたりのオブジェクト数を設定します。
getBucket.maxKeys = 1000; // ページあたりの最大オブジェクト数を 1000 に設定します。
// ...C
完全なサンプルコードについては、「オブジェクトのリスト」をご参照ください。
// ...
// キーコード: max_keys パラメーターを追加して、ページあたりのオブジェクト数を設定します。
params->max_ret = 1000; // ページあたりの最大オブジェクト数を 1000 に設定します。
// ...ossutil の使用
次の例は、examplebucket 内のプレフィックス dir を持つ最初の 100 個の オブジェクトに関する情報をリストする方法を示しています。
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.txtmaxKeysが 2 に設定されている場合、すべてのオブジェクトは 2 つのページで返されます。
maxKeysが 100 に設定されている場合、すべてのオブジェクトは 100 のページで返されます。
本番環境での適用
パフォーマンスの最適化
ページサイズの増加:
max-keysを最大値の 1,000 に設定すると、特に良好なネットワーク条件下で API 呼び出しの数を大幅に削減できます。ただし、一度に多くのデータをロードしすぎないように、メモリ使用量を考慮してください。プレフィックスの並列処理: 数十万以上のオブジェクトがある場合、単純なシーケンシャルなリスト表示は遅くなる可能性があります。この場合、
images/、documents/、logs/などの異なる論理ディレクトリ (プレフィックス) を並列で処理することで、リスト表示の速度を向上させます。ディレクトリ構造のキャッシュ: 変更が頻繁でないディレクトリ構造の場合、リスト表示の結果をキャッシュして、冗長な API 呼び出しを削減します。
コスト管理
頻繁なフルスキャンの回避: 大規模なバケット内のすべてのオブジェクトを定期的にリスト表示すると、コストが高くなる可能性があります。以下のよりコスト効率の高い代替案を検討してください:
ページネーションの合理的な設定: ページサイズが小さすぎると API 呼び出しの数が増加し、大きすぎると単一のリクエストの処理時間とメモリ消費量が増加する可能性があります。
クォータと制限
レスポンスごとの最大アイテム数: 単一の
ListObjectsまたはListObjectsV2リクエストは、最大 1,000 個のオブジェクトキーを返すことができます。ソート方法: オブジェクトキーによる辞書順ソートのみがサポートされています。
よくある質問
OSS は指定されたページ数のオブジェクトのリスト表示をサポートしていますか?
いいえ。
特定のディレクトリ内のすべてのオブジェクトをリストするにはどうすればよいですか?
名前とディレクトリ構造を含む特定のディレクトリ内のすべてのオブジェクトをリストするには、ossutil 2.0 の list-objects-v2 (get-bucket-v2) コマンドを使用します。
オブジェクトをリスト表示する際に、最終更新日時によるソートはサポートされていますか?
いいえ。オブジェクトを最終更新日時でソートする必要がある場合は、データインデックス作成を使用します。