

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在适用于 Rust 的 AWS SDK 中使用分页结果
分页

当有效载荷太大而无法在单个响应中返回时，很多 AWS 操作都会返回截断的结果。相反，该服务会返回一部分数据和一个用于检索下一组项目的令牌。这种模式称为分页。

适用于 Rust 的 AWS SDK 包含操作生成器上的扩展方法 `into_paginator`，可用于自动对结果进行分页。您只需编写处理结果的代码。所有分页操作生成器都有一种可用的 `into_paginator()` 方法，该方法会公开一个 [https://docs.rs/aws-smithy-async/latest/aws_smithy_async/future/pagination_stream/struct.PaginationStream.html](https://docs.rs/aws-smithy-async/latest/aws_smithy_async/future/pagination_stream/struct.PaginationStream.html) 来对结果进行分页。
+ 在 Amazon S3 中，这种方法的一个示例是 [https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/operation/list_objects_v2/builders/struct.ListObjectsV2FluentBuilder.html#method.into_paginator](https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/operation/list_objects_v2/builders/struct.ListObjectsV2FluentBuilder.html#method.into_paginator)。

以下示例使用的是 Amazon Simple Storage Service。但是，对于任何具有一个或多个分页 API 的服务来说，这些概念都是相同的。

 以下代码示例是使用 [https://docs.rs/aws-smithy-async/latest/aws_smithy_async/future/pagination_stream/struct.PaginationStream.html#method.try_collect](https://docs.rs/aws-smithy-async/latest/aws_smithy_async/future/pagination_stream/struct.PaginationStream.html#method.try_collect) 方法将所有分页结果收集到 `Vec` 的最简单示例：

```
let config = aws_config::defaults(BehaviorVersion::latest())
    .load()
    .await;

let s3 = aws_sdk_s3::Client::new(&config);

let all_objects = s3.list_objects_v2()
    .bucket("my-bucket")
    .into_paginator()
    .send()
    .try_collect()
    .await?
    .into_iter()
    .flat_map(|o| o.contents.unwrap_or_default())
    .collect::<Vec<_>>();
```

有时，您想要更好地控制分页，而不是同时将所有内容全部加载到内存中。以下示例遍历 Amazon S3 存储桶中的所有对象。

```
let config = aws_config::defaults(BehaviorVersion::latest())
    .load()
    .await;

let s3 = aws_sdk_s3::Client::new(&config);

let mut paginator = s3.list_objects_v2()
    .bucket("my-bucket")
    .into_paginator()
    // customize the page size (max results per/response)
    .page_size(10)
    .send();

println!("Objects in bucket:");

while let Some(result) = paginator.next().await {
    let resp = result?;
    for obj in resp.contents() {
        println!("\t{:?}", obj);
    }
}
```