S3Client.ListObjectsは、オブジェクトの1000のみを返します。 Amazon C#ライブラリを使用して既存のすべてのオブジェクトのリストを取得するにはどうすればよいですか?
すでに述べたように、 Amazon S には実際に必要 AWS SDK for .NETを使用したキーのリスト :
バケットには実質的に無制限の数のキーを含めることができるため、リストクエリの完全な結果は非常に大きくなる可能性があります。大きな結果セットを管理するために、Amazon S3はページネーションを使用してそれらを複数の応答に分割します。各キーのリスト応答は、応答が切り捨てられているかどうかを示すインジケーターとともに、最大1,000個のキーのページを返します。すべてのキーを受け取るまで、一連のリストキーリクエストを送信します。
言及されているインジケーターは NextMarker プロパティです ObjectsResponse Class -その使用法は完全な例で示されています AWS SDK for .NETを使用したキーのリスト 、関連するフラグメントは次のとおりです。
static AmazonS3 client;
client = Amazon.AWSClientFactory.CreateAmazonS3Client(
accessKeyID, secretAccessKeyID);
ListObjectsRequest request = new ListObjectsRequest();
request.BucketName = bucketName;
do
{
ListObjectsResponse response = client.ListObjects(request);
// Process response.
// ...
// If response is truncated, set the marker to get the next
// set of keys.
if (response.IsTruncated)
{
request.Marker = response.NextMarker;
}
else
{
request = null;
}
} while (request != null);
上記の回答はオブジェクトの一覧表示に推奨されるAPIを使用していないことに注意してください: http://docs.aws.Amazon.com/AmazonS3/latest/API/v2-RESTBucketGET.html
次のスニペットは、新しいAPIでどのように見えるかを示しています。
using (var s3Client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1))
{
ListObjectsV2Request request = new ListObjectsV2Request
{
BucketName = bucketName,
MaxKeys = 10
};
ListObjectsV2Response response;
do
{
response = await s3Client.ListObjectsV2Async(request);
// Process response.
// ...
request.ContinuationToken = response.NextContinuationToken;
} while (response.IsTruncated);
}
ドキュメントによると、クライアントはあなたが説明した場合にページネーションを使用します。ドキュメントに従って、結果に IsTruncated を使用する必要があります... true
呼び出しの場合 ListObjects
を正しく設定してもう一度Marker
で次のページを取得します。-IsTruncated
がfalse
を返したときに呼び出しを停止します。