web-dev-qa-db-ja.com

Amazon S3バケットの_all_オブジェクトを一覧表示する方法は?

S3Client.ListObjectsは、オブジェクトの1000のみを返します。 Amazon C#ライブラリを使用して既存のすべてのオブジェクトのリストを取得するにはどうすればよいですか?

29
user626528

すでに述べたように、 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);
61
Steffen Opel

上記の回答はオブジェクトの一覧表示に推奨される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);        
}
9
lgrosales

ドキュメントによると、クライアントはあなたが説明した場合にページネーションを使用します。ドキュメントに従って、結果に IsTruncated を使用する必要があります... true呼び出しの場合 ListObjects を正しく設定してもう一度Markerで次のページを取得します。-IsTruncatedfalseを返したときに呼び出しを停止します。

0
Yahia