このトピックでは、バケット内のオブジェクト (バケット内のすべてのオブジェクト、特定の数のオブジェクト、名前に特定のプレフィックスを含むオブジェクトなど) をリストする方法について説明します。
注意事項
このトピックのサンプルコードを実行する前に、カスタムドメイン名やセキュリティトークンサービス (STS) などのメソッドを使用して OSSClient インスタンスを作成する必要があります。詳細については、「初期化 (Android SDK)」をご参照ください。
特定の数のオブジェクトのリスト
次のサンプルコードは、examplebucket という名前のバケット内の 20 個のオブジェクトをリストする方法の例です。
// バケット名を指定します (例: examplebucket)。
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// 返されるオブジェクトの最大数を指定します。このパラメーターを設定しない場合、デフォルト値は 100 です。maxkeys の値は 1,000 を超えることはできません。
request.setMaxKeys(20);
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());
}
}
@Override
public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
// リクエスト例外。
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());
}
}
});名前に特定のプレフィックスを含むオブジェクトのリスト
次のサンプルコードは、examplebucket という名前のバケット内で、名前に file というプレフィックスを含むオブジェクトをリストする方法の例です。
// バケット名を指定します (例: examplebucket)。
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// プレフィックスを指定します。
// プレフィックスはあいまい一致に使用されます。クエリは、指定されたプレフィックスで始まる名前のオブジェクトを返します。たとえば、プレフィックスを "a" に設定すると、abc.txt や abcd.jpg など、名前が "a" で始まるすべてのオブジェクトが返されます。
request.setPrefix("file");
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());
}
}
@Override
public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
// リクエスト例外。
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());
}
}
});マーカーの値の後にアルファベット順で並ぶオブジェクトのリスト
次のサンプルコードは、examplebucket という名前のバケット内で、exampleobject.txt という名前のオブジェクトの後にアルファベット順で並ぶオブジェクトをリストする方法の例です。
// バケット名を指定します (例: examplebucket)。
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// マーカーを指定します。リスト操作は、マーカーの後にアルファベット順で並ぶ最初のオブジェクトから開始されます。
// 指定されたマーカーがバケットに存在しない場合、リスト操作はマーカー値の後にアルファベット順で並ぶオブジェクトから開始されます。
request.setMarker("exampleobject.txt");
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());
}
}
@Override
public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
// リクエスト例外。
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());
}
}
});ページ単位でのバケット内の全オブジェクトのリスト
次のサンプルコードは、examplebucket という名前のバケット内のすべてのオブジェクトをページ単位でリストする方法の例です。各ページに最大 20 個のオブジェクトをリストできます。
private String marker = null;
private boolean isCompleted = false;
// ページ単位ですべてのオブジェクトをリストします。
public void getAllObject() {
do {
OSSAsyncTask task = getObjectList();
// スレッドをブロックし、リクエストが完了して NextMarker を取得するのを待ちます。次のページをリクエストするには、前の応答の NextMarker 値にマーカーを設定します。最初のページではマーカーを設定する必要はありません。
// この例では、ループを使用してページ単位でデータをリストします。次のページをリクエストする前に、スレッドをブロックしてリクエストが完了し、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;
}ページ単位で名前に特定のプレフィックスを含むオブジェクトのリスト
次のサンプルコードは、examplebucket という名前のバケット内で、名前に file というプレフィックスを含むオブジェクトをページ単位でリストする方法の例です。各ページに最大 20 個のオブジェクトをリストできます。
private String marker = null;
private boolean isCompleted = false;
// ページ単位ですべてのオブジェクトをリストします。
public void getAllObject() {
do {
OSSAsyncTask task = getObjectList();
// スレッドをブロックし、リクエストが完了して NextMarker を取得するのを待ちます。次のページをリクエストするには、前の応答の NextMarker 値にマーカーを設定します。最初のページではマーカーを設定する必要はありません。
// この例では、ループを使用してページ単位でデータをリストします。次のページをリクエストする前に、スレッドをブロックしてリクエストが完了し、NextMarker を取得するのを待つ必要があります。ご利用のシナリオに基づいてスレッドをブロックするかどうかを判断してください。
task.waitUntilFinished();
} while (!isCompleted);
}
// 1 ページ分のオブジェクトをリストします。
public OSSAsyncTask getObjectList() {
// バケット名を指定します。
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// ページごとに返されるオブジェクトの最大数を指定します。このパラメーターを設定しない場合、デフォルト値は 100 です。maxkeys の値は 1,000 を超えることはできません。
request.setMaxKeys(20);
// プレフィックスを指定します。
// プレフィックスはあいまい一致に使用されます。クエリは、指定されたプレフィックスで始まる名前のオブジェクトを返します。たとえば、プレフィックスを "a" に設定すると、abc.txt や abcd.jpg など、名前が "a" で始まるすべてのオブジェクトが返されます。
request.setPrefix("file");
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;
}名前に特殊文字を含むオブジェクトのリスト
オブジェクトの名前に次の特殊文字のいずれかが含まれている場合は、オブジェクトを転送する前にオブジェクト名をエンコードする必要があります。OSS では URL エンコーディングのみがサポートされています。
シングルクォーテーション (')
ダブルクォーテーション (")
アンパサンド (&)
山括弧 (<>)
中国語
次のサンプルコードは、examplebucket という名前のバケット内で、名前に特殊文字を含むオブジェクトをリストする方法の例です。
// バケット名を指定します (例: examplebucket)。
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// オブジェクト名のエンコーディングタイプを指定します。
request.setEncodingType("url");
oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
@Override
public void onSuccess(ListObjectsRequest request, ListObjectsResult result) {
for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
Log.i("ListObjects", URLDecoder.decode(objectSummary.getKey(), "UTF-8"));
}
}
@Override
public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) {
// リクエスト例外。
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());
}
}
});関連ドキュメント
オブジェクトをリストするために呼び出すことができる API 操作の詳細については、「GetBucket (ListObjects)」および「ListObjectsV2(GetBucketV2)」をご参照ください。
OSSClient インスタンスを初期化する方法の詳細については、「初期化」をご参照ください。