Для тех, кто читает это в 2018+. Доступны два новых API без пагинации: один в AWS SDK для Java 1.x и другой в 2.x.
1.x
В Java SDK есть новый API , который позволяет перебирать объекты в корзине S3 без разбивки на страницы:
AmazonS3 s3 = AmazonS3ClientBuilder.standard().build();
S3Objects.inBucket(s3, "the-bucket").forEach((S3ObjectSummary objectSummary) -> {
// TODO: Consume `objectSummary` the way you need
System.out.println(objectSummary.key);
});
Эта итерация ленива:
Список S3ObjectSummary
s будет извлекаться лениво, страница за раз, по мере необходимости. Размер страницы можно контролировать с помощью метода withBatchSize(int)
.
2.x
API изменен, поэтому вот версия SDK 2.x:
S3Client client = S3Client.builder().region(Region.US_EAST_1).build();
ListObjectsV2Request request = ListObjectsV2Request.builder().bucket("the-bucket").prefix("the-prefix").build();
ListObjectsV2Iterable response = client.listObjectsV2Paginator(request);
for (ListObjectsV2Response page : response) {
page.contents().forEach((S3Object object) -> {
// TODO: Consume `object` the way you need
System.out.println(object.key());
});
}
ListObjectsV2Iterable
также ленив:
Когда вызывается операция, возвращается экземпляр этого класса. На данный момент сервисные звонки еще не сделаны, и поэтому нет гарантии, что запрос действителен. По мере того, как вы выполняете итерацию через итерацию, SDK начнет лениво загружать страницы ответов, делая сервисные вызовы, пока не останется ни одной страницы или пока ваша итерация не остановится. Если в вашем запросе есть ошибки, вы увидите ошибки только после того, как начнете повторять итерацию.