boto3 list_objects_v2 StartAfter не работает правильно - PullRequest
0 голосов
/ 05 февраля 2019

При использовании list_objects_v2

s3client.list_objects_v2 (Bucket = bucket_name, StartAfter = start_after)

из пакета boto3, я замечаю, что если я использую ключ, которыйнаходится внутри папки в корзине, как

корзина - 'some_bucket'

ключ - 'adb / dcvf / staging0000.txt'

ЗатемStartAfter не работает должным образом и возвращает весь набор ключей.

Однако если ключи находятся непосредственно в корзине без каких-либо папок, например, StartAfter работает отлично.

bucket - 'some_bucket'

key - 'staging0000.txt'

Это известная проблема и есть ли обходные пути для этого

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Версия 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))
0 голосов
/ 12 февраля 2019

У меня прекрасно работает ...

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']])
...