【问题标题】:aws s3 in boto3 - how to move to next page by paginator of s3 in boto3boto3中的aws s3 - 如何通过boto3中s3的分页器移动到下一页
【发布时间】:2017-12-07 19:25:18
【问题描述】:

我正在尝试通过分页器或 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})

【问题讨论】:

    标签: html amazon-s3 boto3 paginator


    【解决方案1】:

    (更新,我把之前的内容去掉了,只适用于典型的list_objects,不适用于分页器)

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

    目前,paginator('list_objects') 将返回一个“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相比,您可以更好地遍历页面

    【讨论】:

    • 感谢 cmets。正如你评论的那样,有“NextToken”。但是为什么在我的带有打印(响应)的代码中不存在?
    • @user1429883 检查结果后,我认为我在这里犯了一个错误,需要更正。
    • 这是一个很好的答案。 “list_objects_v2”是完美的。我可以通过“ContinuationToken”和“NextcontinuationToken”制作页面 UI。非常感谢你。
    • @user1429883 您想展示一个有关您如何提供 continuationtoken 和 nextcontinuation token 的示例吗?还探索了使用 boto 进行分页是如何工作的,以在 sql 中制作类似于 offset 和 limit 的东西。
    • @mootmoot 如果我在列表的第三页,我怎样才能回到第二页?我需要为每个页面保存令牌吗?
    【解决方案2】:

    您将MaxItemsPageSize 混淆了。

    最大项目数

    限制返回的返回项目总数的最大数量,同时 分页。

    页面大小

    控制每个结果的每页返回的项目数

    无需跟踪下一页/令牌,迭代器会为您完成。以下代码每页返回 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'])
    

    【讨论】:

    • 好吧,我不知道它与迭代有关。谢谢你。但我的情况是,如果用户在 http GET 方法上传递 ?page=2 。或传递从服务器收到的 ?nexttoken=sdlfkj。如何控制分页器。像mysql有偏移和限制。所以可以通过请求参数控制限制。
    猜你喜欢
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    相关资源
    最近更新 更多