我使用下面提到的代碼來獲取s3存儲桶中所有文件名的列表。我在S3有兩個桶。對於下面的代碼段之一,將返回所有文件名(超過1000個),但是相同的代碼只會爲另一個存儲段返回1000個文件名。我只是不知道發生了什麼。 爲什麼同一個代碼運行一個桶而不是其他?亞馬遜S3僅爲一個存儲桶返回1000個條目,併爲其他存儲桶返回1000個條目(使用java sdk)?
另外我的桶有層次結構文件夾/ filename.jpg。
ObjectListing objects = s3.listObjects("bucket.new.test");
do {
for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) {
String key = objectSummary.getKey();
System.out.println(key);
}
objects = s3.listNextBatchOfObjects(objects);
} while (objects.isTruncated());
但是根源是什麼?爲什麼相同的代碼只能處理一個案件,而不能處理另一個案件? – morsik
這是一個很好的問題,我沒有答案。我只拿@ Abhishek的代碼並「修復」它。我唯一的猜測是它是一個桶的財產。 – oferei
我的s3 java API的「舊」版本有同樣的問題。亞馬遜推出了「v2」,它應該解決這個問題:http://docs.aws.amazon.com/AmazonS3/latest/dev/ListingObjectKeysUsingJava。html 請注意,它使用's3client.listObjectsV2'和'req.setContinuationToken(result.getNextContinuationToken())'。最後一個應該對s3進行單獨的基礎REST GET調用(因爲默認情況下,單個get返回最多1000個鍵,http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) – morsik