このトピックでは、バケット内のすべてのオブジェクト、特定の数のオブジェクト、名前に特定のプレフィックスが含まれるオブジェクトなど、バケット内のオブジェクトを一覧表示する方法について説明します。
使用上の注意
このトピックのサンプルコードを実行する前に、カスタムドメイン名やSecurity Token Service (STS) などの方法を使用してOSSClientインスタンスを作成する必要があります。 詳細については、「初期化」をご参照ください。
特定の数のオブジェクトを一覧表示する
次のサンプルコードでは、examplebucketという名前のバケットに20個のオブジェクトを一覧表示する方法の例を示します。
// バケットの名前を指定します。 例: examplebucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// 返すオブジェクトの最大数を指定します。 このパラメーターを指定しない場合、最大100個のオブジェクトが返されます。 MaxKeysに指定できる最大値は1000です。
request.setMaxKeys (20);
oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
@オーバーライド
public void onSuccess(ListObjectsRequestリクエスト, ListObjectsResult結果) {
for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
Log.i("ListObjects", objectSummary.getKey());
}
}
@オーバーライド
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という名前のバケット内のファイルプレフィックスを名前に含むオブジェクトを一覧表示する方法の例を示しています。
// バケットの名前を指定します。 例: examplebucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// プレフィックスを指定します。
// プレフィックスベースのリストは、ファジーマッチングを使用し、指定されたプレフィックスで始まる名前のオブジェクトを返します。 たとえば、指定されたプレフィックスがaの場合、一覧表示操作は、abc.txtやabcd.jpgなど、バケット内で名前が「a」で始まるすべてのオブジェクトを返します。
request.setPrefix("ファイル");
oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
@オーバーライド
public void onSuccess(ListObjectsRequestリクエスト, ListObjectsResult結果) {
for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
Log.i("ListObjects", objectSummary.getKey());
}
}
@オーバーライド
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());
}
}
});
markerの値の後に名前がアルファベット順に表示されるオブジェクトを一覧表示します。
次のサンプルコードは、examplebucketという名前のバケットで、名前がexampleobject.txtという名前のオブジェクトの後にアルファベット順にあるオブジェクトをリストする方法の例を示しています。
// バケットの名前を指定します。 例: examplebucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// マーカーを指定します。 markerで指定されたオブジェクトの後に名前がアルファベット順になっているオブジェクトが返されます。
// markerで指定されたオブジェクトがバケットに存在しない場合、markerの値の後にアルファベット順に名前が付けられたオブジェクトが返されます。
request.setMarker("exampleobject.txt");
oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
@オーバーライド
public void onSuccess(ListObjectsRequestリクエスト, ListObjectsResult結果) {
for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
Log.i("ListObjects", objectSummary.getKey());
}
}
@オーバーライド
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個のオブジェクトを一覧表示できます。
プライベート文字列マーカー=null;
プライベートブールisCompleted = false;
// バケット内のすべてのオブジェクトをページ単位で一覧表示します。
public void getAllObject() {
do {
OSSAsyncTask task = getObjectList();
// 前のリクエストに対してNextMarkerが返されるまで待ちます。 現在のリクエストのmarkerパラメーターを、前のリクエストに対するレスポンスで返されたNextMarkerの値に設定します。 最初のリクエストでマーカーを設定する必要はありません。
// この例では、ページごとにオブジェクトをリストするためにループが使用されます。 したがって、リクエストは、前のリクエストのNextMarker値が返された後にのみ送信できます。 前のリクエストに対して返されたNextMarker値を待つかどうかを決定できます。
task.waitUntilFinished();
} while (!isCompleted);
}
// ページ上のオブジェクトを一覧表示します。
public OSSAsyncTask getObjectList() {
// バケットの名前を指定します。
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// 各ページに一覧表示できるオブジェクトの最大数を指定します。 このパラメーターを指定しない場合、最大100個のオブジェクトが返されます。 MaxKeysに指定できる最大値は1000です。
request.setMaxKeys (20);
request.setMarker (マーカー);
OSSAsyncTask task = oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
@オーバーライド
public void onSuccess(ListObjectsRequestリクエスト, ListObjectsResult結果) {
for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
Log.i("ListObjects", objectSummary.getKey());
}
// 最後のページにオブジェクトを一覧表示します。
if (!result.isTruncated()) {
isCompleted = true;
return;
}
// 次のリクエストのマーカー値を取得します。
marker = result.getNextMarker();
}
@オーバーライド
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());
}
}
});
タスクを返します。}
名前に特定のプレフィックスが含まれるオブジェクトをページごとにリストする
次のサンプルコードでは、名前にファイルプレフィックスが含まれるオブジェクトを、ページごとにexamplebucketという名前のバケットに一覧表示する方法の例を示します。 各ページに最大20個のオブジェクトを一覧表示できます。
プライベート文字列マーカー=null;
プライベートブールisCompleted = false;
// ページごとにすべてのオブジェクトを一覧表示します。
public void getAllObject() {
do {
OSSAsyncTask task = getObjectList();
// 前のリクエストに対してNextMarkerが返されるまで待ちます。 現在のリクエストのmarkerパラメーターを、前のリクエストに対するレスポンスで返されたNextMarkerの値に設定します。 最初のリクエストでマーカーを設定する必要はありません。
// この例では、ループ関数を使用して、ページごとにオブジェクトを一覧表示します。 したがって、リクエストは、前のリクエストのNextMarker値が返された後にのみ送信できます。 前のリクエストに対して返されたNextMarker値を待つかどうかを決定できます。
task.waitUntilFinished();
} while (!isCompleted);
}
// ページ上のオブジェクトを一覧表示します。
public OSSAsyncTask getObjectList() {
// バケットの名前を指定します。
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// 各ページに一覧表示できるオブジェクトの最大数を指定します。 このパラメーターを指定しない場合、最大100個のオブジェクトが返されます。 MaxKeysに指定できる最大値は1000です。
request.setMaxKeys (20);
// Specify the prefix.
// プレフィックスベースのリストは、ファジーマッチングを使用し、指定されたプレフィックスで始まる名前のオブジェクトを返します。 たとえば、指定されたプレフィックスがaの場合、一覧表示操作は、abc.txtやabcd.jpgなど、バケット内で名前が「a」で始まるすべてのオブジェクトを返します。
request.setPrefix("ファイル");
request.setMarker (マーカー);
OSSAsyncTask task = oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
@オーバーライド
public void onSuccess(ListObjectsRequestリクエスト, ListObjectsResult結果) {
for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
Log.i("ListObjects", objectSummary.getKey());
}
// 最後のページにオブジェクトを一覧表示します。
if (!result.isTruncated()) {
isCompleted = true;
return;
}
// 次のリクエストのマーカー値を取得します。
marker = result.getNextMarker();
}
@オーバーライド
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());
}
}
});
タスクを返します。}
名前に特殊文字が含まれるオブジェクトを一覧表示する
オブジェクトの名前に次のいずれかの特殊文字が含まれている場合は、オブジェクトを送信する前にオブジェクト名をエンコードする必要があります。 OSSではURLエンコードのみがサポートされています。
一重引用符 (')
二重引用符 (")
アンパサンド (&)
アングルブラケット (<>)
漢字、平仮名、片仮名
次のサンプルコードは、examplebucketという名前のバケットに特殊文字を含むオブジェクトを一覧表示する方法の例を示しています。
// バケットの名前を指定します。 例: examplebucket.
ListObjectsRequest request = new ListObjectsRequest("examplebucket");
// オブジェクト名のエンコードタイプを指定します。
request.setEncodingType("url");
oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() {
@オーバーライド
public void onSuccess(ListObjectsRequestリクエスト, ListObjectsResult結果) {
for (OSSObjectSummary objectSummary : result.getObjectSummaries()) {
Log.i("ListObjects", URLDecoder.de code(objectSummary.getKey(), "UTF-8"));
}
}
@オーバーライド
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インスタンスを初期化する方法の詳細については、「初期化」をご参照ください。