#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. Вы заранее знаете ключ. Это то, как вы решаете, к какому объекту вы собираетесь получить доступ. Точно так же, как файл в вашей локальной файловой системе, вы можете перечислить доступные объекты, если это необходимо, и выбрать один из них.