2017-09-07 15 views
0

amazon s3からバケットのcommonPrefixを取得しようとしています。私はすべてのオブジェクトのリストを取得するために次のコードを使用しています:listObjects()は、s3のバケット内のオブジェクトの完全なリストを提供していません

ObjectListing listing = s3Client.listObjects(new ListObjectsRequest().withBucketName(bucket).withPrefix("used/").withDelimiter("/")); 
for (String name : listing.getCommonPrefixes()) 
{ 
    System.out.println(name); 
    objectNames.add(name); 
} 
System.out.println("\n\n\nSize: " + objectNames.size()); 

しかし、単にいくつかのcommonPrefixesを出力します。 2000以上のプレフィックスがありますが、950が表示されます。すべてのプレフィックスはどのように取得できますか?

+0

'objectNames.size()> 2000'を意味しますが、950行しか印刷されませんか? – DodgyCodeException

+0

いいえ、そのバケットには2000を超えるキーがありますが、getCommonPrefixes()は950個のキーしか与えません。 – backslashN

答えて

1

ObjectListingには、一度に1000個までのオブジェクトしか含めることができません。 getCommonPrefixesに電話すると、1000個のオブジェクトの共通接頭辞のみが返されます。 ObjectListingのisTruncated()メソッドをチェックして、さらにレコードがあるかどうかを確認し、getNextMarker()メソッドとそれに続くlistObjectsコールを使用して、残りのオブジェクトレコードとこれらのオブジェクトの共通接頭辞を取得する必要があります。

+0

while(listing.isTruncated()) 'にコードをラップするとタスクが終了しました。そして、次の1000個の接頭辞に持ち込まれる 'listing = s3Client.listNextBatchOfObjects(listing)'。 – backslashN

関連する問題