python - 无法访问 S3 存储桶的子文件夹 – Python、Boto3
问题描述
我已获得访问 S3 存储桶的子文件夹的权限,并希望使用 Python 和 boto3 访问其中的所有文件。我是 S3 的新手,并且已经阅读了文档,但无法弄清楚如何仅成功访问一个子文件夹。我知道 s3 不使用类似 unix 的目录结构,但我无权访问根存储桶。
如何将 boto3 配置为仅连接到此子文件夹?
我已成功使用此 AWS CLI 命令将整个子文件夹下载到我的机器上:
aws s3 cp --recursive s3://s3-bucket-name/SUB_FOLDER/ /Local/Path/Where/Files/Download/To --profile my-profile
这段代码:
AWS_BUCKET='s3-bucket-name'
s3 = boto3.client("s3", region_name='us-east-1', aws_access_key_id=AWS_KEY_ID, aws_secret_access_key=AWS_SECRET)
response = s3.list_objects(Bucket=AWS_BUCKET)
返回此错误:
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied
我还尝试在调用 list_objects 时指定“前缀”选项,但这会产生相同的错误。
解决方案
您想要aws configure
并保存您的凭据和区域,然后使用 boto3 非常简单。
使用 boto3.resource 并像这样获取客户端:
s3_resource = boto3.resource('s3')
s3_client = s3_resource.meta.client
s3_client.list_objects(Bucket=AWS_BUCKET)
你应该很高兴。
推荐阅读
- java - 试图将 C# HTTP 请求转换为 Android
- python - 无法生成在 Cpanel 上部署 Django 的应用程序的进程
- wkhtmltopdf - wkhtmltopdf:自定义订单目录
- javascript - Vue mixin 方法没有在实例上定义
- websphere-liberty - 如何在 Web Sphere Liberty 服务器中添加 MIME 类型?
- android - 文本观察器自动完成仅适用于输入的第一个字符,然后停止
- scala - 使用 Double SCALA 数组过滤元组数组
- twitter-bootstrap - Bootstrap 手风琴 aria-expanded 不起作用
- visual-studio - 如何仅使用 MSBuild 的预定义任务将名称仅存在于 dir2 中的文件从 dir1 复制到 dir2
- html - 将 HTML 表格行的背景图像重叠到上面的图像中