【问题标题】:boto3 list_objects_v2 StartAfter does not work correctlyboto3 list_objects_v2 StartAfter 无法正常工作
【发布时间】:2019-06-28 17:52:56
【问题描述】:

使用 list_objects_v2 时

s3client.list_objects_v2(bucket=bucket_name, StartAfter=starts_after)

从 boto3 包中,我注意到如果我使用存储桶中文件夹内的密钥,例如

bucket - 'some_bucket'

键 - 'adb/dcvf/staging0000.txt'

然后 StartAfter 无法正常工作并返回整个密钥集。

但是,如果密钥直接在存储桶中而没有任何文件夹,则 StartAfter 可以完美运行。

bucket - 'some_bucket'

key - 'staging0000.txt'

这是一个已知问题吗?是否有任何解决方法

【问题讨论】:

  • 您是否将完整的密钥传递给StartAfter?也就是说,您是否通过adb/dcvf/staging0000.txt?开头不应该有斜线。此外,您的问题缺少第二个示例 - 请随时编辑问题以更正它。
  • @John Rotenstein 抱歉,我没能早点讲到这个。我已经编辑了问题,是的,我没有在开始时通过斜线

标签: amazon-web-services amazon-s3 boto3


【解决方案1】:

版本 2:

您的要求似乎是获取在特定键时间后添加的对象的键列表

这不适用于StartAfter 参数,它仅列出在给定字符串之后按字母顺序排列的键。

相反,您需要编写一个程序来获取对象列表,然后确定您想要哪些键,例如:

import boto3

client=boto3.client('s3',region_name='ap-southeast-2')

# Obtain a list of objects in the bucket
response = client.list_objects_v2(Bucket='my-bucket')

# Make a dictionary of Key:Modified Date
objects = {object['Key']:object['LastModified'] for object in response['Contents']}

# Make a list of objects modified after a particular object
OBJECT_TO_COMPARE = 'foo.txt'
latest = [key for key in objects if objects[key] > objects[OBJECT_TO_COMPARE]]

# Print result
print ('\n'.join(latest))

【讨论】:

    【解决方案2】:

    它对我来说非常好......

    import boto3
    
    client=boto3.client('s3',region_name='ap-southeast-2')
    
    # List all objects
    response = client.list_objects_v2(Bucket='my-bucket')
    print([o['Key'] for o in response['Contents']])
    
    print('--------')
    
    # List objects from foo/ onwards
    response = client.list_objects_v2(Bucket='my-bucket', StartAfter='foo/')
    print([o['Key'] for o in response['Contents']])
    

    【讨论】:

    • StartAfter 是您希望 Amazon S3 开始列出的位置。 Amazon S3 在此指定键之后开始列出。我正在尝试列出在特定键之后添加的键。在您的示例中,您没有这样做
    • “在特定键之后添加”是什么意思?你是说时间方面的吗?
    • 是的,我正在寻找在特定键时间后添加的键
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 2022-01-06
    • 2016-09-28
    • 2019-05-19
    • 1970-01-01
    • 2022-09-27
    • 2016-09-01
    相关资源
    最近更新 更多