#java #amazon-web-services #amazon-s3 #aws-sdk #aws-java-sdk
Вопрос:
Я использую AWS SDK для Java 2.15.66
. Я пытаюсь перечислить все объекты в определенной папке. Я следую примеру кода здесь https://docs.aws.amazon.com/AmazonS3/latest/userguide/ListingKeysUsingAPIs.html и пришлось изменить, так как классы в примере недоступны в моей версии SDK. Ниже приведен код, который я должен перечислить объекты
ListObjectsV2Request req = ListObjectsV2Request.builder()
.bucket(S3_BUCKET_NAME)
.prefix(pathBuilder.toString())
.maxKeys(2)
.build();
ListObjectsV2Response resu<
do {
result = s3Client.listObjectsV2(req);
for (S3Object s3Object : result.contents()) {
System.out.printf(" - %s (size: %d)n", s3Object.key(), s3Object.size());
}
req.toBuilder().continuationToken(result.nextContinuationToken());
} while (result.isTruncated());
Этот код всегда выводит одни и те же два объекта в каждом цикле while. То nextContinuationToken()
есть никогда не устанавливается. Я не могу найти другого способа установить токен продолжения. Помощь оценена по достоинству.
Ответ №1:
Попробуйте использовать приведенный ниже код, ссылку из официальной документации aws
ListObjectsV2Request listObjectsReqManual = ListObjectsV2Request.builder()
.bucket(bucketName)
.maxKeys(1)
.build();
boolean done = false;
while (!done) {
ListObjectsV2Response listObjResponse = s3.listObjectsV2(listObjectsReqManual);
for (S3Object content : listObjResponse.contents()) {
System.out.println(content.key());
}
if (listObjResponse.nextContinuationToken() == null) {
done = true;
}
listObjectsReqManual = listObjectsReqManual.toBuilder()
.continuationToken(listObjResponse.nextContinuationToken())
.build();
}
Вам нужно присвоить результат .toBuilder().continuationToken(…)
метода переменной