CloudCube и Boto3 - список содержимого объектов

Я обращаюсь к вам с просьбой о помощи в составлении списка объектов в моем ведре CloudCube. Я разрабатываю Django-приложение, размещенное на Heroku. Я использую дополнение CloudCube для постоянного хранения данных. CloudCube работает на AWS S3 Bucket, и CloudCube предоставляет приватный ключ/пространство имен для доступа к моим файлам. Я использую библиотеку boto3 для доступа к ведру, и все работает нормально, когда я хочу загрузить/выгрузить файл; однако у меня возникают проблемы с попытками перечислить объекты в этом конкретном ведре с префиксным ключом CloudCube. На любой запрос я получаю исключение AccessDennied Exception.

Для доступа к ведру я использую следующую реализацию:

s3_client = boto3.client('s3', aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
                             aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
                             endpoint_url=settings.AWS_S3_ENDPOINT_URL, region_name='eu-west-1')

s3_result = s3_client.list_objects(Bucket=settings.AWS_STORAGE_BUCKET_NAME, Prefix=settings.CLOUD_CUBE_KEY)
    if 'Contents' not in s3_result:
        return []

    file_list = []
    for key in s3_result['Contents']:
        if f"{username}/{mode.value}" in key['Key']:
            file_list.append(key['Key'])

В качестве имени ведра я использую префикс в URI, который указывает на ведро CloudCube на AWS согласно их документации: https://BUCKETNAME.s3.amazonaws.com/CUBENAME. CUBENAME используется в качестве префиксного ключа.

Есть ли у кого-нибудь подсказка, чего мне не хватает?

Заранее спасибо!

Согласно документации CloudCube, чтобы перечислить директорию, необходим косой слэш в префиксе.

Поэтому вы должны обновить свой код следующим образом, чтобы он работал:

s3_result = s3_client.list_objects(Bucket=settings.AWS_STORAGE_BUCKET_NAME, Prefix=f'{settings.CLOUD_CUBE_KEY}/')
Вернуться на верх