Как установить следующий токен продолжения в объекте AWS ListObjectsV2Request

#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(…) метода переменной