如何在 AWS ListObjectsV2Request 对象上设置下一个延续令牌

How to set next continuation token on AWS ListObjectsV2Request object

我正在为 Java 2.15.66 使用 AWS SDK。我试图列出特定文件夹下的所有对象。我在此处遵循代码示例 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 result;
    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()。我找不到任何其他方法来设置延续令牌。帮助表示赞赏。

尝试使用以下代码,参考 link 来自官方 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(…) 方法的结果赋给一个变量