boto3 中的 aws s3 - 如何通过 boto3 中的 s3 分页器移动到下一页

aws s3 in boto3 - how to move to next page by paginator of s3 in boto3

我正在尝试通过分页器或 buckets.objects.all() 获取 s3 对象。 但是没有任何想法传递下一页或下一个令牌来移动。

我想在 html 中分页显示 s3 图片。

这是 s3 分页器代码。这里没有任何通过的下一页。

http://boto3.readthedocs.io/en/latest/guide/paginators.html

paginator = client.get_paginator('list_objects')
page_iterator = paginator.paginate(Bucket='my-bucket',
                                   PaginationConfig={'MaxItems': 10})

(更新,我删除了之前的内容,只适用于典型的list_objects,不适用于paginator)

对@HelloV的赞美,如果你需要精确的分页控制,你可以试试boto3.client('s3').list_objects_v2而不是list_objects,

目前,paginator('list_objects') 将 return 一个 "Marker" 元素,它允许您使用 JMESPpath 跳转到特定的迭代器。

filtered_iterator = page_iterator.search("Contents[?Marker = `<a_marker_key>`]")
for key_data in filtered_iterator:
    print(key_data)

但是,您仍然需要遍历整个分页器迭代器来存储标记键,并进行页面操作。对于 list_objects_v2,您将获得 "ContinuationToken"(如 Marker)和 "NextContinuationToken",与 list_object

相比,它可以让您更好地遍历页面

您将 MaxItemsPageSize 混淆了。

MaxItems

Limits the maximum number of total returned items returned while paginating.

页面大小

Controls the number of items returned per page of each result.

无需跟踪下一个page/token,迭代器会为您完成。以下代码 returns 每页 2 个对象,最多 10 个对象,这意味着最多可以有 5 次迭代。 MaxItemsPageSize 都是可选的。现在清楚了吗?

paginator = client.get_paginator('list_objects')
page_iterator = paginator.paginate(Bucket='my-bucket',
                                   PaginationConfig={'PageSize': 2, 'MaxItems': 10})
for page in page_iterator:
  print(page['Contents'])