python CloudCube和Boto 3-列出对象的内容

5us2dqdw  于 2022-12-28  发布在  Python
关注(0)|答案(1)|浏览(96)

我遇到你请求帮助列出我的CloudCube bucket中的对象。我正在开发一个托管在Heroku上的Django应用程序。我正在使用CloudCube附加组件进行持久存储。CloudCube运行在AWS S3 Bucket上,CloudCube提供私钥/命名空间来访问我的文件。我使用boto3库来访问bucket,当我想要上传/下载文件;然而,我在尝试列出带有CloudCube前缀键的特定bucket中的对象时遇到了困难。2在任何请求中,我都会收到AccessDennied异常。
要访问bucket,我使用以下实现:

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中使用前缀,根据AWS的文档,该前缀指向AWS上的CloudCube存储桶:https://BUCKETNAME.s3.amazonaws.com/CUBENAME.CUBENAME则用作前缀密钥。
有人知道我错过了什么吗?
先谢谢你!

zsohkypk

zsohkypk1#

根据CloudCube的文档,您需要在前缀上加上一个尾部斜杠来列出目录。
所以你应该像这样更新你的代码来使它工作:

s3_result = s3_client.list_objects(Bucket=settings.AWS_STORAGE_BUCKET_NAME, Prefix=f'{settings.CLOUD_CUBE_KEY}/')

相关问题