Как получить размер файла / ключа в boto S3?

должен быть простой способ получить размер файла (размер ключа), не вытягивая весь файл. Я вижу это в свойствах браузера AWS S3. И я думаю, что могу получить его из заголовка "Content-length" запроса "HEAD". Но я не связываю точки о том, как это сделать с boto. Дополнительные похвалы, если вы разместите ссылку на некоторые более полные примеры, чем в стандартные документы boto.

EDIT: таким образом, следующее, кажется, делает трюк (хотя из глядя на исходный код, я не совсем уверен.):

bk = conn.get_bucket('my_bucket_name')
ky = boto.s3.key.Key(bk)
ky.open_read()  ## This sends a GET request. 
print ky.size

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

2 ответов


это будет работать:

bk = conn.get_bucket('my_bucket_name')
key = bk.lookup('my_key_name')
print key.size

метод поиска просто выполняет запрос HEAD на ведро для имени ключа, поэтому он вернет все заголовки (включая content-length) для ключа, но не передаст никакого фактического содержимого ключа.

на S3 tutorial упоминает это, но не очень явно и не в этом точном контексте. Я добавлю раздел об этом, чтобы облегчить его поиск.

Примечание: Для каждой старой ссылки, как http://boto.cloudhackers.com/s3_tut.html, который возвращает 404, добавить в "/en/latest" сразу после ".com" : http://boto.cloudhackers.com/en/latest/s3_tut.html . (Кто-то должен исследовать mod_rewrite...)


на boto3:

s3.head_object также выполняет запрос HEAD для получения метаданных об объекте:

s3 = boto3.client('s3')
response = s3.head_object(Bucket='bucketname', Key='keyname')
size = response['ContentLength']