AWS Boto3 上传文件对象失败

AWS Boto3 Failure to Upload File Object

我遇到了一个问题,我正在尝试测试我的身份验证以将文件上传到 S3 存储桶中。目前我遇到访问被拒绝的问题,但我想确保我的配置按预期工作。我理解这段代码的工作方式是我正在使用配置文件配置 'PROFILE_CONFIG_1'。这意味着我正在使用此配置捕获 access_keys 和密钥。

然后我只是获取我的本地文件并尝试将其放入 S3 容器中。我怀疑我是否能够使用 S3 浏览器实际将文件按预期放置在路径中,但代码告诉我的不同。

def upload_to_aws():
    session = boto3.Session(profile_name='PROFILE_CONFIG_1')
    dev_s3_client = session.client('s3')    

    local_file = 'test.txt'

    bucket = 'myBucketName'

    filename = 'path/to/dir/'

    with open(local_file, 'rb') as f:
        dev_s3_client.upload_fileobj(f, bucket, filename) # Fails with error (AccessDenied) when calling the PutObject operation

更新:我尝试使用 AWS CLI 添加文件,一切都按预期进行。直到现在,我才在 python 代码中看到拒绝访问问题。我也通过代码简化为这样的东西,但仍然看到错误消息。

session = boto3.Session(profile_name='PROFILE_CONFIG_1')
s3_client = session.client('s3')
s3_client.upload_file('Path_To_File\test.txt', 'myBucketName','test.txt')

约翰的更新 2:

s3 = boto3.client('s3')
with open("test_file.txt", "rb") as f:
    s3.upload_fileobj(f, 'take-uat-ics', 'destination_path/test_file.txt')

您发布的代码中有两个与目标 S3 对象密钥相关的问题。

第一种是使用path/to/dir/作为目标S3对象键。 S3 复制不像常规 Windows/Mac/Linux 文件复制那样工作,您可以使用相当于 cp file.txt /usr/mary/ 的东西将文件复制到文件夹,结果是 /usr/mary/file.txt。这不适用于 S3 API。目标必须是 S3 对象的完整密钥。

第二个问题是/destination_path/test_file.txt中前导斜杠的使用。 S3 密钥不要求也不允许使用前导正斜杠作为 S3 存储桶根的指示符。

有效的 S3 对象键既不以正斜杠开头也不以正斜杠结尾。有效 S3 对象键的示例是:

dogs/small/poodle.png
destination_path/test_file.txt