Как получить размер файла / ключа в 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']