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}/')