このトピックでは、バケット内のすべてのオブジェクト、特定の数のオブジェクト、および名前に特定のプレフィックスが含まれるオブジェクトを一覧表示する方法について説明します。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用しています。 OSS と同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。
オブジェクトを一覧表示するには、
oss:ListObjects
権限が必要です。 詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。
シンプルリストを使用したオブジェクトの一覧表示
次のサンプルコードは、指定されたバケット内の 100 個のオブジェクトを一覧表示する方法の例を示しています。
using Aliyun.OSS;
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。例: examplebucket。
var bucketName = "examplebucket";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメータを変更します。
var conf = new ClientConfiguration();
// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
conf.SetRegion(region);
try
{
var listObjectsRequest = new ListObjectsRequest(bucketName);
// シンプルリストを使用してバケット内のオブジェクトを一覧表示します。デフォルトでは、100 個のオブジェクトが返されます。
var result = client.ListObjects(listObjectsRequest);
Console.WriteLine("オブジェクトの一覧表示に成功しました");
foreach (var summary in result.ObjectSummaries)
{
Console.WriteLine("ファイル名:{0}", summary.Key);
}
}
catch (Exception ex)
{
Console.WriteLine("オブジェクトの一覧表示に失敗しました。{0}", ex.Message);
}
特定の数のオブジェクトを一覧表示する
次のサンプルコードは、特定の数のオブジェクトを一覧表示する方法の例を示しています。
using Aliyun.OSS;
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。例: examplebucket。
var bucketName = "examplebucket";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメータを変更します。
var conf = new ClientConfiguration();
// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
conf.SetRegion(region);
try
{
var listObjectsRequest = new ListObjectsRequest(bucketName)
{
// MaxKeys を指定して、一覧表示されるオブジェクトの最大数を 200 に設定します。 MaxKeys のデフォルト値は 100 です。MaxKeys の最大値は 1000 です。
MaxKeys = 200,
};
var result = client.ListObjects(listObjectsRequest);
Console.WriteLine("オブジェクトの一覧表示に成功しました");
foreach (var summary in result.ObjectSummaries)
{
Console.WriteLine(summary.Key);
}
}
catch (Exception ex)
{
Console.WriteLine("オブジェクトの一覧表示に失敗しました、{0}", ex.Message);
}
名前に指定されたプレフィックスが含まれるオブジェクトを一覧表示する
次のサンプルコードは、バケット内で名前に特定のプレフィックスが含まれるオブジェクトを一覧表示する方法の例を示しています。
using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。例: examplebucket。
var bucketName = "examplebucket";
// 名前に "test" プレフィックスが含まれるオブジェクトを一覧表示します。デフォルトでは、最大 100 個のオブジェクトが一覧表示されます。
var prefix = "test";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメータを変更します。
var conf = new ClientConfiguration();
// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
conf.SetRegion(region);
try
{
var keys = new List<string>();
ObjectListing result = null;
string nextMarker = string.Empty;
do
{
var listObjectsRequest = new ListObjectsRequest(bucketName)
{
Marker = nextMarker,
MaxKeys = 100,
Prefix = prefix,
};
result = client.ListObjects(listObjectsRequest);
foreach (var summary in result.ObjectSummaries)
{
Console.WriteLine(summary.Key);
keys.Add(summary.Key);
}
nextMarker = result.NextMarker;
} while (result.IsTruncated);
Console.WriteLine("バケット:{0} のオブジェクトの一覧表示に成功しました ", bucketName);
}
catch (OssException ex)
{
Console.WriteLine("エラーコード: {0} で失敗しました。エラー情報: {1}。 \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("エラー情報: {0} で失敗しました", ex.Message);
}
マーカーの値よりアルファベット順に後の名前を持つオブジェクトを一覧表示する
マーカーパラメータを構成して、一覧表示操作を開始するオブジェクトの名前を指定できます。次のサンプルコードは、マーカーパラメータの値よりアルファベット順に後の名前を持つオブジェクトを一覧表示する方法の例を示しています。
using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。例: examplebucket。
var bucketName = "examplebucket";
// マーカーパラメータを指定します。例: exampleobject.txt。
var marker = "exampleobject.txt";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメータを変更します。
var conf = new ClientConfiguration();
// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
conf.SetRegion(region);
try
{
var keys = new List<string>();
ObjectListing result = null;
string nextMarker = marker;
do
{
var listObjectsRequest = new ListObjectsRequest(bucketName)
// より多くのオブジェクトを返すか、ページごとにオブジェクトを一覧表示するには、MaxKeys の値を変更できます。
{
Marker = nextMarker,
MaxKeys = 100,
};
result = client.ListObjects(listObjectsRequest);
foreach (var summary in result.ObjectSummaries)
{
Console.WriteLine(summary.Key);
keys.Add(summary.Key);
}
nextMarker = result.NextMarker;
// IsTruncated の値が true の場合、次の読み取りは NextMarker から開始されます。
} while (result.IsTruncated);
Console.WriteLine("バケット:{0} のオブジェクトの一覧表示に成功しました ", bucketName);
}
catch (OssException ex)
{
Console.WriteLine("エラーコード: {0} で失敗しました。エラー情報: {1}。 \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("エラー情報: {0} で失敗しました", ex.Message);
}
バケット内のすべてのオブジェクトを一覧表示する
次のサンプルコードは、指定されたバケット内のすべてのオブジェクトを一覧表示する方法の例を示しています。
using Aliyun.OSS;
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。例: examplebucket。
var bucketName = "examplebucket";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメータを変更します。
var conf = new ClientConfiguration();
// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
conf.SetRegion(region);
// バケット内のすべてのオブジェクトを一覧表示します。
public void ListObject(string bucketName)
{
try
{
ObjectListing result = null;
string nextMarker = string.Empty;
do
{
// MaxKeys パラメータを構成して、各ページに一覧表示できるオブジェクトの最大数を指定できます。返されるオブジェクトの数が MaxKeys の値を超える場合、オブジェクトはページごとに一覧表示されます。
var listObjectsRequest = new ListObjectsRequest(bucketName)
{
Marker = nextMarker,
MaxKeys = 100
};
result = client.ListObjects(listObjectsRequest);
Console.WriteLine("ファイル:");
foreach (var summary in result.ObjectSummaries)
{
Console.WriteLine("名前:{0}", summary.Key);
}
nextMarker = result.NextMarker;
} while (result.IsTruncated);
}
catch (Exception ex)
{
Console.WriteLine("オブジェクトの一覧表示に失敗しました。{0}", ex.Message);
}
}
バケット内のオブジェクトを非同期的に一覧表示する
次のサンプルコードは、指定されたバケット内のオブジェクトを非同期的に一覧表示する方法の例を示しています。
using System;
using System.IO;
using System.Threading;
using Aliyun.OSS;
namespace AsyncListObjects
{
class Program
{
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
static string endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。例: examplebucket。
static string bucketName = "yourBucketName";
static AutoResetEvent _event = new AutoResetEvent(false);
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメータを変更します。
var conf = new ClientConfiguration();
// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
conf.SetRegion(region);
static void Main(string[] args)
{
Program.AsyncListObjects();
Console.ReadKey();
}
public static void AsyncListObjects()
{
try
{
var listObjectsRequest = new ListObjectsRequest(bucketName);
client.BeginListObjects(listObjectsRequest, ListObjectCallback, null);
_event.WaitOne();
}
catch (Exception ex)
{
Console.WriteLine("オブジェクトの非同期一覧表示に失敗しました。{0}", ex.Message);
}
}
// オブジェクトが非同期的に一覧表示された後にコールバックを実装するには、ListObjectCallback メソッドを呼び出します。オブジェクトを一覧表示するために非同期操作を呼び出す場合、操作は同様のメソッドでコールバックを実装する必要があります。
private static void ListObjectCallback(IAsyncResult ar)
{
try
{
var result = client.EndListObjects(ar);
foreach (var summary in result.ObjectSummaries)
{
Console.WriteLine("オブジェクト名: {0}", summary.Key);
}
_event.Set();
Console.WriteLine("オブジェクトの非同期一覧表示に成功しました");
}
catch (Exception ex)
{
Console.WriteLine("オブジェクトの非同期一覧表示に失敗しました。{0}", ex.Message);
}
}
}
}
関連情報
オブジェクトを同期的に一覧表示するために使用される完全なサンプルコードについては、GitHub をご覧ください。
オブジェクトを非同期的に一覧表示するために使用される完全なサンプルコードについては、GitHub をご覧ください。
オブジェクトを一覧表示するために呼び出すことができる API 操作の詳細については、「GetBucket(ListObjects)」をご参照ください。