You need to enable JavaScript to run this app. AWS SDK V2使用ListObjectsRequest查询S3仅返回1000条如何配置续传令牌
优惠活动
大模型
产品
解决方案
定价
更多

AWS SDK V2使用ListObjectsRequest查询S3仅返回1000条如何配置续传令牌

问题根因

S3原生ListObjects接口单次请求最多返回1000个对象,这是API的固定限制,和你使用的SDK版本无关。要拉取全量对象,需要通过续传令牌(Continuation Token) 分页拉取所有结果。

实现方案

方案1:使用SDK内置分页器(推荐)

AWS SDK for Java 2.x已经封装了全量分页逻辑,直接调用listObjectsPaginator方法即可自动处理续传令牌,无需手动维护分页状态,代码更简洁不易出错:

try {
    ListObjectsRequest listObjects = ListObjectsRequest
            .builder()
            .bucket(bucketName)
            .build();
    // 分页器自动遍历所有页的对象
    s3.listObjectsPaginator(listObjects).stream()
            .map(ListObjectsResponse::contents)
            .flatMap(List::stream)
            .forEach(myValue -> System.out.print("\n The name of the key is " + myValue.key()));

} catch (S3Exception e) {
    System.err.println(e.awsErrorDetails().errorMessage());
    System.exit(1);
}

方案2:手动维护续传令牌

如果需要自定义分页逻辑,可以手动判断是否存在后续页,每次请求携带上一次返回的nextContinuationToken即可:

try {
    String continuationToken = null;
    // 循环拉取直到没有后续页
    do {
        ListObjectsRequest.Builder requestBuilder = ListObjectsRequest
                .builder()
                .bucket(bucketName);
        // 存在续传令牌时带入请求参数
        if (continuationToken != null) {
            requestBuilder.continuationToken(continuationToken);
        }
        ListObjectsResponse res = s3.listObjects(requestBuilder.build());
        // 处理当前页的对象
        for (S3Object myValue : res.contents()) {
            System.out.print("\n The name of the key is " + myValue.key());
        }
        // 获取下一页的续传令牌,无后续页时返回null
        continuationToken = res.nextContinuationToken();
    } while (continuationToken != null);

} catch (S3Exception e) {
    System.err.println(e.awsErrorDetails().errorMessage());
    System.exit(1);
}

补充说明

如果需要调整单次请求返回的对象数量,可以在构造ListObjectsRequest时添加maxKeys参数,参数最大值为1000。


内容的提问来源于stack exchange,提问作者Rushikesh Sabde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 10:45:07