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
我遇到了一个问题,我正在尝试测试我的身份验证以将文件上传到 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