Подтвердить что ты не робот

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

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

РЕДАКТИРОВАТЬ: Итак, похоже, что это делает трюк (хотя, глядя на исходный код, я не совсем уверен.):

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

в boto3:

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

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

Ответ 3

в boto3 с использованием ресурса S3:

boto3.resource('s3').Bucket(bucketname).Object(keyname).content_length

head_object клиента S3 вернул мне http 403 Forbidden

Ответ 4

Используя S3 Object вы можете получить размер файла (он же объекта) в байтах. Это ресурс, представляющий объект Amazon S3.

Фактически вы можете получить все метаданные, связанные с объектом. Как размер объекта, язык содержимого, кодировка, last_modified и т.д.

import boto3

s3 = boto3.resource('s3')
object = s3.Object('bucket_name','key')
file_size = object.content_length //size in bytes

Ссылка boto3 doc