Как получить размер файла / ключа в boto S3? - PullRequest
44 голосов
/ 15 марта 2011

Должен быть простой способ получить размер файла (размер ключа), не перетягивая файл целиком.Я вижу это в Свойствах браузера 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

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

Ответы [ 4 ]

66 голосов
/ 31 марта 2011

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

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

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

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

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

32 голосов
/ 09 мая 2017

in boto3 :

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

s3 = boto3.client('s3')
response = s3.head_object(Bucket='bucketname', Key='keyname')
size = response['ContentLength']
8 голосов
/ 05 ноября 2018

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

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

Вызов head_object клиента S3 вернул мне http "403 Forbidden"

0 голосов
/ 24 мая 2019

В Бото 3 :

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

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

import boto3

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

Ссылка boto3 doc

...