如何使用Python的boto3实现从Ubuntu上传到S3的对象自动公开
问题解决方法
原因说明
S3的存储桶权限和桶内单个对象的权限是独立配置的,即便存储桶设置了公开属性,默认上传的对象仍然为私有权限,所以单独访问对象时会提示权限被拒绝。
代码修改方案
你只需要在调用upload_file方法时增加额外参数指定对象ACL为公开可读即可,修改后的完整代码如下:
#!/usr/bin/env python import glob import boto3 import os BUCKET_NAME = 'bucketname' FOLDER_NAME = 'foldername' session = boto3.Session(profile_name='default') s3 = session.client('s3') # 优化循环逻辑,统一处理所有后缀的文件 file_suffix = ['csv', 'json', 'xml', 'txt'] for suffix in file_suffix: file_list = glob.glob(f"/home/ubuntu/Desktop/scan_reports/*.{suffix}") for filename in file_list: key = f"{FOLDER_NAME}/{os.path.basename(filename)}" print(f"Putting {filename} as {key}") # 新增ExtraArgs参数指定公开可读权限 s3.upload_file(filename, BUCKET_NAME, key, ExtraArgs={'ACL': 'public-read'}) print("All files uploaded to S3")
注意事项
- 请确认你使用的AWS IAM账号拥有
s3:PutObjectAcl权限,否则添加ACL参数后上传会报错 - 如果你需要所有上传到该存储桶的对象默认都是公开权限,也可以直接在S3控制台配置桶的默认对象ACL为公开可读,后续上传不需要再额外指定参数
内容的提问来源于stack exchange,提问作者sidrocks77
相关产品推荐
相关产品推荐

