使用list_objects_v2时
s3client.list_objects_v2(Bucket = bucket_name, StartAfter = starts_after)
从boto3软件包中,我注意到,如果我使用存储桶中类似
的文件夹中的密钥,存储桶-'some_bucket'
键-'adb / dcvf / staging0000.txt'
然后StartAfter无法正常工作,它将返回整个键集。
但是,如果键直接位于存储桶中而没有类似的任何文件夹,则StartAfter可以完美地工作。
存储桶-'some_bucket'
键-'staging0000.txt'
这是一个已知问题,对此有任何解决方法
答案 0 :(得分:0)
对我来说很好用...
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']])
答案 1 :(得分:0)
版本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))