You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 03:15:03