gpt4 book ai didi

python - 使用 Boto3 将文件上传到带有前缀的 S3 存储桶

转载 作者:太空狗 更新时间:2023-10-30 01:50:33 25 4
gpt4 key购买 nike

我正在尝试将文件上传到 S3 存储桶中,但我无权访问存储桶的根级别,因此我需要将其上传到某个前缀。以下代码:

import boto3
s3 = boto3.resource('s3')
open('/tmp/hello.txt', 'w+').write('Hello, world!')
s3_client.upload_file('/tmp/hello.txt', bucket_name, prefix+'hello-remote.txt')

给我一​​个错误:

调用 PutObject 操作时发生错误 (AccessDenied):Access Denied: ClientError Traceback (most recent call last): File "/var/task/tracker.py", line 1009, in testHandler s3_client.upload_file ('/tmp/hello.txt', bucket_name, prefix+'hello-remote.txt') 文件“/var/runtime/boto3/s3/inject.py”,第 71 行,在 upload_file extra_args=ExtraArgs, callback=Callback)文件“/var/runtime/boto3/s3/transfer.py”,第 641 行,in upload_file self._put_object(filename, bucket, key, callback, extra_args) ,第 651 行,在 _put_object **extra_args) 文件“/var/runtime/botocore/client.py”,第 228 行,在 _api_call 返回 self._make_api_call(operation_name, kwargs) 文件“/var/runtime/botocore/client.py ",第 492 行,在 _make_api_call raise ClientError(parsed_response, operation_name) ClientError: 调用 PutObject 操作时发生错误 (AccessDenied): Access Denied

bucket_name 的格式为 abcdprefix 的格式为 a/b/c/d/。我不确定该错误是由于斜杠错误造成的,还是您可以通过某种方式在其他地方指定前缀,或者我没有写权限(尽管我应该有)。

这段代码执行没有任何错误:

for object in output_bucket.objects.filter(Prefix=prefix):
print(object.key)

虽然没有输出,因为桶是空的。

最佳答案

我假设您已完成所有这些设置:

  1. AWS 访问 key ID 和 key 设置(通常存储在 ~/.aws/credentials
  2. 您可以访问 S3 并且知道您的存储桶名称和前缀(子目录)

根据Boto3 S3 upload_file documentation ,您应该像这样上传:

upload_file(文件名、存储桶、 key 、ExtraArgs=None、Callback=None、Config=None)

import boto3
s3 = boto3.resource('s3')
s3.meta.client.upload_file('/tmp/hello.txt', 'mybucket', 'hello.txt')

这里要注意的重点是s3.meta.client。不要忘记这一点——它对我有用!

希望对您有所帮助。

关于python - 使用 Boto3 将文件上传到带有前缀的 S3 存储桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37017244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com