You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制ListObjects返回对象数并获取截断状态与下一页标记

问题原因与解决方案

你的问题源于gcs::ListObjectsReader的自动分页特性:它的迭代器会在当前页遍历完成后,自动发起下一页请求,直到拉取完存储桶内所有对象。所以即便你设置了MaxResults(5),遍历到end()时也会拿到全部10个对象。

要实现「仅返回MaxResults指定数量,同时获取截断状态和下一页标记」的需求,可按以下方式修改代码:

核心修改点

  • 限制读取对象的数量,避免遍历到reader->end()触发自动分页
  • 通过ListObjectsReader的metadata()方法获取分页元数据(截断状态、下一页标记)

修改后的代码

google::cloud::StatusOr<gcs::ListObjectsReader> response = m_client->ListObjects(m_bucket, gcs::MaxResults(count));
if (!response) {
  auto error = response.status();
  std::cout << error << std::endl;
  return out; // 根据实际需求处理错误场景
}

list_objects_response out;
auto& reader = *response;
auto it = reader.begin();

// 最多读取count个对象,或遍历完当前页即停止
for (int i = 0; i < count && it != reader.end(); ++i, ++it) {
  out.keys.push_back(it->value().name());
}

// 填充截断状态与下一页标记
auto const& metadata = reader.metadata();
out.truncated = metadata.is_truncated();
out.next_token = metadata.next_page_token();

后续分页请求示例

如果out.truncated为true,可使用out.next_token发起下一次请求:

auto next_response = m_client->ListObjects(
    m_bucket, 
    gcs::MaxResults(count), 
    gcs::PageToken(out.next_token)
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:53:17