Размер файла, хранящегося в ведре 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

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

import boto3
s3 = boto3.resource("s3")
bucket = s3.Bucket('mybucket')
length = bucket.Object('mykey').content_length

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

import boto3
s3 = boto3.resource("s3")
length = s3.Object('mybucket', 'mykey').content_length

Кроме того, к вашему сведению, вы неправильно используете термин "префикс". Значение, которое вы передаете в Bucket.Object(), является ключом, а не префиксом.

Чтобы получить доступ к существующему ведру с помощью 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/).

Вернуться на верх