OSS バケット内のすべてのオブジェクト、指定した数のオブジェクト、特定のプレフィックスを持つオブジェクトをリスト表示する方法について説明します。
注意事項
-
本トピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用しています。同一リージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。サポートされているリージョンおよびエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
本トピックでは、環境変数からアクセス認証情報を取得します。詳細については、「アクセス認証情報の設定」をご参照ください。
-
本トピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成する方法を示します。カスタムドメインの使用やセキュリティトークンサービス (STS) からの認証情報による認証など、その他の構成方法については、「クライアント構成」をご参照ください。
オブジェクトをリスト表示するには、
oss:ListObjects権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。
背景情報
1 回の呼び出しでバケット内の最大 1,000 個のオブジェクトをリスト表示するために、GetBucket (ListObjects) 操作または GetBucketV2 (ListObjectsV2) 操作を呼び出すことができます。結果をフィルター処理するためにパラメーターを指定できます。たとえば、特定の開始位置からオブジェクトをリスト表示したり、指定されたディレクトリ内のオブジェクトおよびサブディレクトリをリスト表示したり、ページネーションを使用して 1,000 個を超えるオブジェクトをリスト表示したりできます。これらの 2 つの操作の主な違いは次のとおりです。
GetBucket (ListObjects)操作は、デフォルトで所有者情報を返します。GetBucketV2 (ListObjectsV2)操作の応答に所有者情報を含めるには、fetchOwnerパラメーターを設定する必要があります。説明バージョン管理が有効になっているバケット内のオブジェクトをリスト表示するには、
GetBucketV2 (ListObjectsV2)操作を使用してください。
以下のセクションでは、GetBucket (ListObjects) 操作および GetBucketV2 (ListObjectsV2) 操作のパラメーターについて説明します。
GetBucket (ListObjects)操作を使用したオブジェクトのリスト表示GetBucket (ListObjects)操作は、次のいずれかの形式で呼び出すことができます。ObjectListing listObjects(String bucketName):デフォルトで、バケット内の最大 100 個のオブジェクトをリスト表示します。ObjectListing listObjects(String bucketName, String prefix):デフォルトで、指定されたプレフィックスを持つバケット内の最大 100 個のオブジェクトをリスト表示します。ObjectListing listObjects(ListObjectsRequest listObjectsRequest):柔軟なクエリのための複数のフィルターオプションを提供します。
次の表は、
GetBucket (ListObjects)操作のパラメーターについて説明しています。パラメーター
説明
メソッド
objectSummaries
オブジェクトのメタデータのリスト。
List<OSSObjectSummary> getObjectSummaries()
prefix
返されるオブジェクト名に含まれる必要があるプレフィックス。
String getPrefix()
delimiter
オブジェクト名をグループ化するために使用される文字。
String getDelimiter()
marker
リスト表示を開始するオブジェクトキー。
String getMarker()
maxKeys
返されるオブジェクトの最大数。
int getMaxKeys()
nextMarker
次のリクエストのマーカーとして使用するオブジェクトキー。このパラメーターは、応答が切り捨てられている場合にのみ表示されます。
String getNextMarker()
isTruncated
返されたオブジェクトリストが切り捨てられているかどうかを示します。
false:オブジェクトリストは切り捨てられていません。true:オブジェクトリストは切り捨てられています。
boolean isTruncated()
commonPrefixes
指定された
delimiterによってグループ化されたオブジェクト名プレフィックスのコレクション。List<String> getCommonPrefixes()
encodingType
応答内のオブジェクト名のエンコーディングタイプ。
String getEncodingType()
GetBucketV2 (ListObjectsV2)操作を使用したオブジェクトのリスト表示GetBucketV2 (ListObjectsV2)操作は、次のいずれかの形式で呼び出すことができます。ListObjectsV2Result listObjectsV2(String bucketName):デフォルトで、バケット内の最大 100 個のオブジェクトをリスト表示します。ListObjectsV2Result listObjectsV2(String bucketName, String prefix):デフォルトで、指定されたプレフィックスを持つバケット内の最大 100 個のオブジェクトをリスト表示します。ListObjectsV2Result listObjectsV2(ListObjectsRequest listObjectsRequest):柔軟なクエリのための複数のフィルターオプションを提供します。
次の表は、
GetBucketV2 (ListObjectsV2)操作のパラメーターについて説明しています。パラメーター
説明
メソッド
objectSummaries
オブジェクトのメタデータのリスト。
List<OSSObjectSummary> getObjectSummaries()
prefix
返されるオブジェクト名に含まれる必要があるプレフィックス。
String getPrefix()
delimiter
オブジェクト名をグループ化するために使用される文字。
String getDelimiter()
startAfter
リストの続きを開始するためのオブジェクトキー。
String getStartAfter()
maxKeys
返されるオブジェクトの最大数。
int getMaxKeys()
continuationToken
以前の切り捨てられた応答からのトークンで、リスト表示をどこから継続するかを指定します。
String getContinuationToken()
nextContinuationToken
次のページの結果を取得するためのトークン。このパラメーターは、応答が切り捨てられている場合にのみ表示されます。
String getNextContinuationToken()
isTruncated
返されたオブジェクトリストが切り捨てられているかどうかを示します。
false:オブジェクトリストは切り捨てられていません。true:オブジェクトリストは切り捨てられています。
boolean isTruncated()
commonPrefixes
指定された
delimiterによってグループ化されたオブジェクト名プレフィックスのコレクション。List<String> getCommonPrefixes()
encodingType
応答内のオブジェクト名のエンコーディングタイプ。
String getEncodingType()
fetchOwner
応答に所有者情報を含めるかどうかを指定します。
true:応答に所有者情報が含まれます。false:応答に所有者情報は含まれません。
String getFetchOwner()
オブジェクトのリスト表示
特定のバケット内のオブジェクトをリスト表示するために、GetBucket (ListObjects) 操作または GetBucketV2 (ListObjectsV2) 操作を呼び出すことができます。
GetBucket (ListObjects)
次のサンプルコードは、GetBucket (ListObjects) 操作を呼び出してバケット内のオブジェクトをリスト表示する方法を示しています。デフォルトでは、各リクエストで最大 100 個のオブジェクトが返されます。
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";
// オブジェクトのプレフィックスを指定します。例:exampledir/object。
String keyPrefix = "exampledir/object";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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 {
// オブジェクトをリスト表示します。keyPrefix が設定されていない場合は、バケット内のすべてのオブジェクトがリスト表示されます。keyPrefix が設定されている場合は、指定されたプレフィックスを持つオブジェクトのみがリスト表示されます。
ObjectListing objectListing = ossClient.listObjects(bucketName, keyPrefix);
List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
for (OSSObjectSummary s : sums) {
System.out.println("\t" + s.getKey());
}
} catch (OSSException oe) {
System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、エラーで拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
} GetBucketV2 (ListObjectsV2)
次のサンプルコードは、GetBucketV2 (ListObjectsV2) 操作を呼び出してバケット内のオブジェクトをリスト表示する方法を示しています。デフォルトでは、各リクエストで最大 100 個のオブジェクトが返されます。
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";
// オブジェクトのプレフィックスを指定します。例:exampledir/object。
String keyPrefix = "exampledir/object";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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 {
// オブジェクトをリスト表示します。keyPrefix が設定されていない場合は、バケット内のすべてのオブジェクトがリスト表示されます。keyPrefix が設定されている場合は、指定されたプレフィックスを持つオブジェクトのみがリスト表示されます。
ListObjectsV2Result result = ossClient.listObjectsV2(bucketName, keyPrefix);
List<OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();
for (OSSObjectSummary s : ossObjectSummaries) {
System.out.println("\t" + s.getKey());
}
} catch (OSSException oe) {
System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、エラーで拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}ListObjectsRequest を使用したオブジェクトのリスト表示
ListObjectsRequest のパラメーターを設定して、柔軟なクエリを実行できます。次の表は、各パラメーターについて説明しています。
パラメーター | 説明 | メソッド |
prefix | 指定されたプレフィックスで始まるオブジェクト名に応答を制限します。 | setPrefix(String prefix) |
delimiter | オブジェクトキーをグループ化するための文字。プレフィックスから最初のデリミタまでの同じ文字列を含むキーは、単一の | setDelimiter(String delimiter) |
marker | リスト表示を開始するキーを指定します。応答には、指定されたマーカーの後に辞書式順序で現れるキーを持つオブジェクトのみが含まれます。 | setMarker(String marker) |
maxKeys | 応答で返されるオブジェクトの最大数を設定します。デフォルト値は 100 で、最大値は 1000 です。 | setMaxKeys(Integer maxKeys) |
encodingType | 応答内のオブジェクトキーのエンコーディングタイプを指定します。有効な値は | setEncodingType(String encodingType) |
指定した数のオブジェクトのリスト表示
次のコード例は、指定した数のオブジェクトをリスト表示する方法を示しています。
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";
// バケットのリージョンを指定します。たとえば、ご利用のバケットが中国 (杭州) リージョンにある場合は、このパラメーターを 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 {
// 返されるオブジェクトの最大数を設定します。
final int maxKeys = 200;
// オブジェクトをリスト表示します。
ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withMaxKeys(maxKeys));
List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
for (OSSObjectSummary s : sums) {
System.out.println("\t" + s.getKey());
}
} catch (OSSException oe) {
System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
} 指定したプレフィックスを持つオブジェクトのリスト表示
次のコード例は、指定したプレフィックスを持つオブジェクトをリスト表示する方法を示しています。
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";
// オブジェクトのプレフィックスを指定します。例:exampledir/object。
String keyPrefix = "exampledir/object";
// バケットのリージョンを指定します。たとえば、ご利用のバケットが中国 (杭州) リージョンにある場合は、このパラメーターを 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 {
// 指定されたプレフィックスを持つオブジェクトをリスト表示します。デフォルトでは、100 個のオブジェクトが返されます。
ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withPrefix(keyPrefix));
List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
for (OSSObjectSummary s : sums) {
System.out.println("\t" + s.getKey());
}
} catch (OSSException oe) {
System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
} 指定したマーカー以降のオブジェクトのリスト表示
次のコード例は、指定されたマーカーの後に辞書式順序で現れるキーを持つオブジェクトをリスト表示する方法を示しています。
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";
// マーカーを指定します。応答には、マーカーの後に辞書式順序で現れるキーを持つオブジェクトのみが含まれます。
String marker = "ex";
// バケットのリージョンを指定します。たとえば、ご利用のバケットが中国 (杭州) リージョンにある場合は、このパラメーターを 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 {
// 指定されたマーカー以降のオブジェクトをリスト表示します。デフォルトでは、100 個のオブジェクトが返されます。
ObjectListing objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withMarker(marker));
List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
for (OSSObjectSummary s : sums) {
System.out.println("\t" + s.getKey());
}
} catch (OSSException oe) {
System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}ページネーションを使用したすべてのオブジェクトのリスト表示
次のコード例は、ページネーションを使用してバケット内のすべてのオブジェクトをリスト表示する方法を示しています。maxKeys パラメーターは、各ページで返されるオブジェクトの数を指定します。
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";
// 1 ページあたりに返されるオブジェクト数を 200 に設定します。
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 nextMarker = null;
ObjectListing objectListing;
do {
objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).withMarker(nextMarker).withMaxKeys(maxKeys));
List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
for (OSSObjectSummary s : sums) {
System.out.println("\t" + s.getKey());
}
nextMarker = objectListing.getNextMarker();
} while (objectListing.isTruncated());
} catch (OSSException oe) {
System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}ページネーションを使用したプレフィックス付きオブジェクトのリスト表示
次のコード例は、ページネーションを使用して指定されたプレフィックスを持つオブジェクトをリスト表示する方法を示しています。
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";
// 1 ページあたりに返されるオブジェクト数を 200 に設定します。
int maxKeys = 200;
// オブジェクトのプレフィックスを指定します。例:exampledir/object。
String keyPrefix = "exampledir/object";
// リスト表示を開始するオブジェクトを指定します。例:objecttest.txt。
String nextMarker = "objecttest.txt";
// バケットのリージョンを指定します。たとえば、ご利用のバケットが中国 (杭州) リージョンにある場合は、このパラメーターを 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 {
ObjectListing objectListing;
do {
objectListing = ossClient.listObjects(new ListObjectsRequest(bucketName).
withPrefix(keyPrefix).withMarker(nextMarker).withMaxKeys(maxKeys));
List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
for (OSSObjectSummary s : sums) {
System.out.println("\t" + s.getKey());
}
nextMarker = objectListing.getNextMarker();
} while (objectListing.isTruncated());
} catch (OSSException oe) {
System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}オブジェクト名のエンコーディングの指定
オブジェクト名に次のいずれかの文字が含まれている場合、送信前に URL エンコードする必要があります。OSS は URL エンコードのみをサポートしています。
シングルクォーテーション (')
ダブルクォーテーション (")
アンパサンド (&)
山括弧 (< >)
中国語の列挙用コンマ(
、)漢字
次のコードは、オブジェクト名のエンコーディングを指定する方法を示しています。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.net.URLDecoder;
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";
// 1 ページあたりに返されるオブジェクト数を 200 に設定します。
int maxKeys = 200;
// オブジェクトのプレフィックスを指定します。例:exampledir/object。
String keyPrefix = "exampledir/object";
// リスト表示を開始するオブジェクトを指定します。例:objecttest.txt。
String nextMarker = "objecttest.txt";
// バケットのリージョンを指定します。たとえば、ご利用のバケットが中国 (杭州) リージョンにある場合は、このパラメーターを 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 {
ObjectListingListObjectsV2Request を使用したオブジェクトのリスト表示
ListObjectsV2Request のパラメーターを設定して、柔軟なクエリを実行できます。たとえば、指定した数のオブジェクト、指定されたプレフィックスを持つオブジェクト、またはページネーションを使用してバケット内のすべてのオブジェクトをリスト表示できます。
次の表は、ListObjectsV2Request のパラメーターについて説明しています。
パラメーター | 説明 | メソッド |
prefix | 返されるオブジェクトキーが開始する必要のあるプレフィックスを指定します。 | setPrefix(String prefix) |
delimiter | オブジェクトキーをグループ化するために使用される文字(例:スラッシュ ( | setDelimiter(String delimiter) |
maxKeys | 1 回の応答で返されるオブジェクトの最大数。オブジェクトは辞書式順序で返されます。デフォルトは 100、最大は 1,000 です。 | setMaxKeys(Integer maxKeys) |
startAfter | リスト表示を開始するキーを指定します。応答には、この値の後に辞書式順序で現れるキーを持つオブジェクトのみが含まれます。 | setStartAfter(String startAfter) |
continuationToken | 以前の切り捨てられた応答からのトークン。このトークンを指定すると、次のページの結果が取得されます。 | setContinuationToken(String continuationToken) |
encodingType | 応答内のオブジェクトキーのエンコーディングタイプを指定します。有効な値は | setEncodingType(String encodingType) |
fetchOwner | 応答にオブジェクト所有者の情報を含めるかどうかを指定します。 | setFetchOwner(boolean fetchOwner ) |
指定した数のオブジェクトのリスト表示
次のコードは、指定した数のオブジェクトをリスト表示します。
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;
// バケットが配置されているリージョンを指定します。例として中国 (杭州) リージョンを使用しています。
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 {
// オブジェクトをリスト表示します。デフォルトでは、リクエストで最大 100 個のオブジェクトが返されます。この例では、返されるオブジェクトの最大数を 200 に設定しています。
ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
listObjectsV2Request.setMaxKeys(maxKeys);
ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
List<OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();
for (OSSObjectSummary s : ossObjectSummaries) {
System.out.println("\t" + s.getKey());
}
} catch (OSSException oe) {
System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}プレフィックス付きオブジェクトのリスト表示
次のコードは、指定されたプレフィックスを持つオブジェクトをリスト表示します。
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";
// オブジェクトのプレフィックスを指定します。例:exampledir/object。
String prefix = "exampledir/object";
// バケットが配置されているリージョンを指定します。例として中国 (杭州) リージョンを使用しています。
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 {
// 指定されたプレフィックスを持つオブジェクトをリスト表示します。
ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
listObjectsV2Request.setPrefix(prefix);
ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
List<OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();
for (OSSObjectSummary s : ossObjectSummaries) {
System.out.println("\t" + s.getKey());
}
} catch (OSSException oe) {
System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}特定のキー以降から開始するオブジェクトのリスト表示
次のコードは、startAfter パラメーターを使用して、特定のキー以降からオブジェクトをリスト表示します。
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";
// バケットが配置されているリージョンを指定します。例として中国 (杭州) リージョンを使用しています。
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 {
// 応答には、startAfter 値の後に辞書式順序で現れるキーを持つオブジェクトのみが含まれます。
ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
listObjectsV2Request.setStartAfter("ex");
ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
List<OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();
for (OSSObjectSummary s : ossObjectSummaries) {
System.out.println("\t" + s.getKey());
}
} catch (OSSException oe) {
System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}結果に所有者情報を含める
次のコードは、リスト結果に所有者情報を含めます。
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";
// バケットが配置されているリージョンを指定します。例として中国 (杭州) リージョンを使用しています。
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 {
// デフォルトでは、応答に所有者情報は含まれません。これを含めるには、fetchOwner パラメーターを true に設定します。
ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName);
listObjectsV2Request.setFetchOwner(true);
ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request);
List<OSSObjectSummary> ossObjectSummaries = result.getObjectSummaries();
for (OSSObjectSummary s : ossObjectSummaries) {
System.out.println("\t" + s.getKey());
if (s.getOwner() != null) {
System.out.println("owner id:" + s.getOwner().getId());
System.out.println("name:" + s.getOwner().getDisplayName());
}
}
} catch (OSSException oe) {
System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}ページ単位ですべてのオブジェクトをリスト表示
次のコードは、ページ単位でバケット内のすべてのオブジェクトをリスト表示します。maxKeys パラメーターは、1 ページあたりに返されるオブジェクトの数を決定します。
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;
// バケットが配置されているリージョンを指定します。例として中国 (杭州) リージョンを使用しています。
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("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}ページ単位でプレフィックス付きオブジェクトをリスト表示
次のコードは、ページ単位で指定されたプレフィックスを持つオブジェクトをリスト表示します。
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";
// オブジェクトのプレフィックスを指定します。例:exampledir/object。
String keyPrefix = "exampledir/object";
// 返されるオブジェクトの最大数を設定します。
int maxKeys = 200;
// バケットが配置されているリージョンを指定します。例として中国 (杭州) リージョンを使用しています。
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;
// 指定されたプレフィックスを持つオブジェクトをページ単位でリスト表示します。
do {
ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName).withMaxKeys(maxKeys);
listObjectsV2Request.setPrefix(keyPrefix);
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("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}オブジェクトキーのエンコーディングの指定
次のコードは、オブジェクトキーのエンコーディングを指定する方法を示しています。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.net.URLDecoder;
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";
// オブジェクトのプレフィックスを指定します。例:exampledir/object。
String keyPrefix = "exampledir/object";
// 返されるオブジェクトの最大数を設定します。
int maxKeys = 200;
// バケットが配置されているリージョンを指定します。例として中国 (杭州) リージョンを使用しています。
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;
// 応答を URL エンコードするように指定した場合、応答内のプレフィックス、デリミタ、startAfter、キー、および共通プレフィックスの値をデコードする必要があります。
do {
ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName).withMaxKeys(maxKeys);
listObjectsV2Request.setPrefix(keyPrefix);
listObjectsV2Request.setEncodingType("url");
listObjectsV2Request.setContinuationToken(nextContinuationToken);
result = ossClient.listObjectsV2(listObjectsV2Request);
// プレフィックスをデコードします。
if (result.getPrefix() != null) {
String prefix = URLDecoder.decode(result.getPrefix(), "UTF-8");
System.out.println("prefix: " + prefix);
}
// デリミタをデコードします。
if (result.getDelimiter() != null) {
String delimiter = URLDecoder.decode(result.getDelimiter(), "UTF-8");
System.out.println("delimiter: " + delimiter);
}
// startAfter 値をデコードします。
if (result.getStartAfter() != null) {
String startAfter = URLDecoder.decode(result.getStartAfter(), "UTF-8");
System.out.println("startAfter: " + startAfter);
}
// オブジェクトキーをデコードします。
for (OSSObjectSummary s : result.getObjectSummaries()) {
String decodedKey = URLDecoder.decode(s.getKey(), "UTF-8");
System.out.println("key: " + decodedKey);
}
// 共通プレフィックスをデコードします。
for (String commonPrefix: result.getCommonPrefixes()) {
String decodeCommonPrefix = URLDecoder.decode(commonPrefix, "UTF-8");
System.out.println("CommonPrefix:" + decodeCommonPrefix);
}
nextContinuationToken = result.getNextContinuationToken();
} while (result.isTruncated());
} catch (OSSException oe) {
System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}ディレクトリのシミュレーション
OSS はネイティブにディレクトリをサポートしていません。すべてのデータをオブジェクトとしてフラットな構造で管理します。ディレクトリをシミュレートするには、スラッシュ (/) で終わるキーを持つ 0 バイトのオブジェクトを作成します。OSS コンソールではこれがディレクトリとして表示され、他のオブジェクトと同様にアップロードおよびダウンロードできます。ディレクトリを作成する完全なコード例については、GitHub のサンプルをご参照ください。
delimiter パラメーターと prefix パラメーターを使用して、ディレクトリ構造のように階層的にオブジェクトをリスト表示できます。
prefixパラメーターをディレクトリ名に設定すると、そのパス以下のすべてのオブジェクトおよびサブディレクトリが再帰的にリスト表示されます。すべての結果はObjectsリストで返されます。prefixを設定し、さらにdelimiterをスラッシュ (/) に設定すると、指定されたパスにあるオブジェクトおよび直下のサブディレクトリのみがリスト表示されます。オブジェクトはObjectsリストで返され、サブディレクトリはCommonPrefixesリストにグループ化されます。サブディレクトリ内のオブジェクトはリスト表示されません。
たとえば、バケットに次のオブジェクトが含まれているとします。oss.jpg、fun/test.jpg、fun/movie/001.avi、および fun/movie/007.avi。スラッシュ (/) がデリミタです。次の例は、これらのオブジェクトをディレクトリ内にあるかのようにリスト表示する方法を示しています。
バケット内のすべてのオブジェクトのリスト表示
GetBucket (ListObjects) を使用してバケット内のすべてのオブジェクトをリスト表示
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.model.*; 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"; // バケットが配置されているリージョンを指定します。この例では中国 (杭州) リージョンを使用しています。 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 { // ListObjectsRequest を作成します。 ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName); // オブジェクトをリスト表示します。 ObjectListing listing = ossClient.listObjects(listObjectsRequest); // すべてのオブジェクトを走査します。 System.out.println("Objects:"); for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) { System.out.println(objectSummary.getKey()); } // すべての共通プレフィックスを走査します。 System.out.println("CommonPrefixes:"); for (String commonPrefix : listing.getCommonPrefixes()) { System.out.println(commonPrefix); } } catch (OSSException oe) { System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエスト ID:" + oe.getRequestId()); System.out.println("ホスト ID:" + oe.getHostId()); } catch (ClientException ce) { System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。"); System.out.println("エラーメッセージ:" + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } }GetBucketV2 (ListObjectsV2) を使用してバケット内のすべてのオブジェクトをリスト表示
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.model.*; 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"; // バケットが配置されているリージョンを指定します。この例では中国 (杭州) リージョンを使用しています。 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 { // オブジェクトをリスト表示します。 ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName); ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request); // オブジェクトを走査します。 System.out.println("Objects:"); for (OSSObjectSummary objectSummary : result.getObjectSummaries()) { System.out.println(objectSummary.getKey()); } // 共通プレフィックスを走査します。 System.out.println("CommonPrefixes:"); for (String commonPrefix : result.getCommonPrefixes()) { System.out.println(commonPrefix); } } catch (OSSException oe) { System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエスト ID:" + oe.getRequestId()); System.out.println("ホスト ID:" + oe.getHostId()); } catch (ClientException ce) { System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。"); System.out.println("エラーメッセージ:" + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } }結果
どちらの方法も、バケット内のすべてのオブジェクトをリスト表示する際に次の結果を返します。
Objects: fun/movie/001.avi fun/movie/007.avi fun/test.jpg oss.jpg CommonPrefixes:
ディレクトリ内のすべてのオブジェクトの再帰的リスト表示
GetBucket (ListObjects) を使用してディレクトリ内のすべてのオブジェクトを再帰的にリスト表示
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.model.*; 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"; // バケットが配置されているリージョンを指定します。この例では中国 (杭州) リージョンを使用しています。 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 { // ListObjectsRequest を作成します。 ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName); // 'fun' ディレクトリ内のすべてのオブジェクトをリスト表示するためにプレフィックスを設定します。 listObjectsRequest.setPrefix("fun/"); // 'fun' ディレクトリ内のすべてのオブジェクトを再帰的にリスト表示します。 ObjectListing listing = ossClient.listObjects(listObjectsRequest); // すべてのオブジェクトを走査します。 System.out.println("Objects:"); for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) { System.out.println(objectSummary.getKey()); } // すべての共通プレフィックスを走査します。 System.out.println("\nCommonPrefixes:"); for (String commonPrefix : listing.getCommonPrefixes()) { System.out.println(commonPrefix); } } catch (OSSException oe) { System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエスト ID:" + oe.getRequestId()); System.out.println("ホスト ID:" + oe.getHostId()); } catch (ClientException ce) { System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。"); System.out.println("エラーメッセージ:" + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } }GetBucketV2 (ListObjectsV2) を使用してディレクトリ内のすべてのオブジェクトを再帰的にリスト表示
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.model.*; 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"; // バケットが配置されているリージョンを指定します。この例では中国 (杭州) リージョンを使用しています。 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 { // ListObjectsV2Request を作成します。 ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName); // 'fun' ディレクトリ内のすべてのオブジェクトをリスト表示するためにプレフィックスを設定します。 listObjectsV2Request.setPrefix("fun/"); // リストリクエストを送信します。 ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request); // オブジェクトを走査します。 System.out.println("Objects:"); for (OSSObjectSummary objectSummary : result.getObjectSummaries()) { System.out.println(objectSummary.getKey()); } // 共通プレフィックスを走査します。 System.out.println("\nCommonPrefixes:"); for (String commonPrefix : result.getCommonPrefixes()) { System.out.println(commonPrefix); } } catch (OSSException oe) { System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエスト ID:" + oe.getRequestId()); System.out.println("ホスト ID:" + oe.getHostId()); } catch (ClientException ce) { System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。"); System.out.println("エラーメッセージ:" + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } }どちらの方法も、指定されたディレクトリ内のすべてのオブジェクトを再帰的にリスト表示する際に次の結果を返します。
Objects: fun/movie/001.avi fun/movie/007.avi fun/test.jpg CommonPrefixes:
オブジェクトとサブディレクトリのリスト表示
GetBucket (ListObjects) を使用してオブジェクトとサブディレクトリをリスト表示
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.model.*; 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"; // バケットが配置されているリージョンを指定します。この例では中国 (杭州) リージョンを使用しています。 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 { // ListObjectsRequest を作成します。 ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName); // デリミタをスラッシュ (/) に設定します。 listObjectsRequest.setDelimiter("/"); // 'fun' ディレクトリ内のすべてのオブジェクトとサブディレクトリをリスト表示します。 listObjectsRequest.setPrefix("fun/"); ObjectListing listing = ossClient.listObjects(listObjectsRequest); // すべてのオブジェクトを走査します。 System.out.println("Objects:"); // objectSummaries リストには、'fun/' ディレクトリ直下のオブジェクトが含まれます。 for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) { System.out.println(objectSummary.getKey()); } // すべての共通プレフィックスを走査します。 System.out.println("\nCommonPrefixes:"); // commonPrefixes リストには、'fun/' ディレクトリ内のすべてのサブディレクトリが含まれます。fun/movie/001.avi および fun/movie/007.avi オブジェクトは 'movie/' サブディレクトリ内にあるため、ここにはリスト表示されません。 for (String commonPrefix : listing.getCommonPrefixes()) { System.out.println(commonPrefix); } } catch (OSSException oe) { System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエスト ID:" + oe.getRequestId()); System.out.println("ホスト ID:" + oe.getHostId()); } catch (ClientException ce) { System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。"); System.out.println("エラーメッセージ:" + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } }GetBucketV2 (ListObjectsV2) を使用してオブジェクトとサブディレクトリをリスト表示
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.model.*; 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"; // バケットが配置されているリージョンを指定します。この例では中国 (杭州) リージョンを使用しています。 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 { // ListObjectsV2Request を作成します。 ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request(bucketName); // 'fun/' ディレクトリ内のすべてのオブジェクトとサブディレクトリをリスト表示するためにプレフィックスを設定します。 listObjectsV2Request.setPrefix("fun/"); // デリミタをスラッシュ (/) に設定します。 listObjectsV2Request.setDelimiter("/"); // リストリクエストを送信します。 ListObjectsV2Result result = ossClient.listObjectsV2(listObjectsV2Request); // オブジェクトを走査します。 System.out.println("Objects:"); // objectSummaries リストには、'fun/' ディレクトリ直下のオブジェクトが含まれます。 for (OSSObjectSummary objectSummary : result.getObjectSummaries()) { System.out.println(objectSummary.getKey()); } // 共通プレフィックスを走査します。 System.out.println("\nCommonPrefixes:"); // commonPrefixes リストには、'fun/' ディレクトリ内のすべてのサブディレクトリが含まれます。fun/movie/001.avi および fun/movie/007.avi オブジェクトは 'movie/' サブディレクトリ内にあるため、ここにはリスト表示されません。 for (String commonPrefix : result.getCommonPrefixes()) { System.out.println(commonPrefix); } } catch (OSSException oe) { System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエスト ID:" + oe.getRequestId()); System.out.println("ホスト ID:" + oe.getHostId()); } catch (ClientException ce) { System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。"); System.out.println("エラーメッセージ:" + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } }どちらの方法も、指定されたパスにあるオブジェクトとサブディレクトリをリスト表示する際に次の結果を返します。
Objects: fun/test.jpg CommonPrefixes: fun/movie/
ディレクトリサイズの計算
GetBucket (ListObjects) を使用してディレクトリ内のオブジェクトの合計サイズを計算
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.CredentialsProviderFactory; import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.model.OSSObjectSummary; import com.aliyun.oss.model.ObjectListing; import com.aliyun.oss.model.ListObjectsRequest; 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"; // バケットが配置されているリージョンを指定します。この例では中国 (杭州) リージョンを使用しています。 String region = "cn-hangzhou"; // プレフィックスを指定します(例:'exampledir/')。ルートディレクトリを走査する場合は、空のままにしてください。 String prefix = "exampledir/"; // 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 { long totalSize = 0; int totalCount = 0; String nextMarker = null; final int maxKeys = 1000; do { ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName); listObjectsRequest.setPrefix(prefix); listObjectsRequest.setMaxKeys(maxKeys); // ページネーションのために前の応答のマーカーを使用します。 listObjectsRequest.setMarker(nextMarker); ObjectListing objectListing = ossClient.listObjects(listObjectsRequest); if (objectListing.getObjectSummaries().isEmpty()) { break; } for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) { totalSize += objectSummary.getSize(); totalCount++; // 各オブジェクトのキーとサイズを出力します。 System.out.println("File: " + objectSummary.getKey() + " | Size: " + objectSummary.getSize() + " bytes (" + formatSize(objectSummary.getSize()) + ")"); } nextMarker = objectListing.getNextMarker(); } while (nextMarker != null && !nextMarker.isEmpty()); System.out.println("\nFolder Prefix: " + (prefix.isEmpty() ? "/" : prefix)); System.out.println("Total objects: " + totalCount); System.out.println("Total size (bytes): " + totalSize); System.out.println("Total size (human readable): " + formatSize(totalSize)); } catch (OSSException oe) { System.out.println("OSSException をキャッチしました: " + oe.getErrorMessage()); System.out.println("Error Code: " + oe.getErrorCode()); System.out.println("Request ID: " + oe.getRequestId()); } catch (ClientException ce) { System.out.println("ClientException をキャッチしました: " + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } // バイト単位を人間が読みやすい形式に変換します。 public static String formatSize(long size) { if (size <= 0) { return "0 B"; } String[] units = {"B", "KB", "MB", "GB", "TB", "PB"}; int unitIndex = 0; double sizeD = size; while (sizeD >= 1024 && unitIndex < units.length - 1) { sizeD /= 1024; unitIndex++; } return String.format("%.2f %s", sizeD, units[unitIndex]); } }GetBucketV2 (ListObjectsV2) を使用してディレクトリ内のオブジェクトの合計サイズを計算
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.CredentialsProviderFactory; import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.model.ListObjectsV2Request; import com.aliyun.oss.model.ListObjectsV2Result; import com.aliyun.oss.model.OSSObjectSummary; 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"; // バケットが配置されているリージョンを指定します。この例では中国 (杭州) リージョンを使用しています。 String region = "cn-hangzhou"; // プレフィックスを指定します(例:'exampledir/')。ルートディレクトリを走査する場合は、空のままにしてください。 String prefix = "exampledir/"; // 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 { long totalSize = 0; int totalCount = 0; String continuationToken = null; final int maxKeys = 1000; do { ListObjectsV2Request request = new ListObjectsV2Request(bucketName) .withPrefix(prefix) .withMaxKeys(maxKeys) .withContinuationToken(continuationToken); ListObjectsV2Result result = ossClient.listObjectsV2(request); for (OSSObjectSummary objectSummary : result.getObjectSummaries()) { totalSize += objectSummary.getSize(); totalCount++; System.out.println("File: " + objectSummary.getKey() + " | Size: " + objectSummary.getSize() + " bytes (" + formatSize(objectSummary.getSize()) + ")"); } continuationToken = result.getNextContinuationToken(); } while (continuationToken != null); System.out.println("\nFolder Prefix: " + (prefix.isEmpty() ? "/" : prefix)); System.out.println("Total objects: " + totalCount); System.out.println("Total size (bytes): " + totalSize); System.out.println("Total size (human readable): " + formatSize(totalSize)); }catch (OSSException oe) { System.out.println("OSSException をキャッチしました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエスト ID:" + oe.getRequestId()); System.out.println("ホスト ID:" + oe.getHostId()); } catch (ClientException ce) { System.out.println("ClientException をキャッチしました。これは、ネットワークにアクセスできないなど、OSS との通信中にクライアントが深刻な内部問題に遭遇したことを意味します。"); System.out.println("エラーメッセージ:" + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } // バイト単位を人間が読みやすい形式に変換します。 public static String formatSize(long size) { String[] units = {"B", "KB", "MB", "GB", "TB", "PB"}; int unitIndex = 0; double sizeD = size; while (sizeD >= 1024 && unitIndex < units.length - 1) { sizeD /= 1024; unitIndex++; } return String.format("%.2f %s", sizeD, units[unitIndex]); } }
参照
オブジェクトのリスト表示に関する完全なサンプルコードについては、GitHub の例をご参照ください。
オブジェクトのリスト表示に関する詳細については、「GetBucket (ListObjects)」および「ListObjectsV2 (GetBucketV2)」をご参照ください。
LiveChannel 関連のオブジェクトのリスト表示および管理に関する詳細については、「LiveChannel 管理 (Java SDK V1)」をご参照ください。