Размер файла, хранящегося в корзине Amazon S3

#python #python-3.x #django #amazon-web-services #amazon-s3

Вопрос:

У меня есть следующая модель

 class MediaFile(Media):  s3_file = GenericFileField(tag="s3-tag", null=True, blank=True, max_length=300)  

Как я могу получить размер файла, хранящегося на s3?

Я пробовал это, но ничего не вышло.

 def file_size(self):  try:  prefix = get_file_key(self.s3_file)  s3 = boto3.resource("s3")  bucket = s3.Bucket()  return bucket.Object(prefix).content_length  except:  pass  

Ответ №1:

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

 import boto3 s3 = boto3.resource("s3") bucket = s3.Bucket('mybucket') length = bucket.Object('cats/persian.jpg').content_length  

Альтернативно:

 import boto3 s3 = boto3.resource("s3") length = s3.Object('mybucket', 'cats/persian.jpg').content_length  

К вашему сведению, переданное значение Bucket.Object() является ключом (например cats/persian.jpg ), а не префиксом (например cats/ ).

Комментарии:

1. Thnx. Как получить ключ файла для s3?

2. Вы не «получаете» ключ для объекта S3. Вы заранее знаете ключ. Это то, как вы решаете, к какому объекту вы собираетесь получить доступ. Точно так же, как файл в вашей локальной файловой системе, вы можете перечислить доступные объекты, если это необходимо, и выбрать один из них.