Kut*_*ren 5 file-upload amazon-s3 access-denied amazon-web-services boto3
我的问题是我无法将文件从我部署的项目上传到 S3 存储桶,即使我可以从本地主机上传。期待 URL,当我调用该方法时,一切都保持不变(标题、正文等)。
我正在使用 boto3 与 s3 交互并使用创建的 IAM 用户凭证。此外,对于部署,我使用 AWS Elastic Beanstalk。
以下是我用于上传的代码;
def put(self, bytes, data, folder, file_name):
self.ext = file_name.split(".")[-1]
if self.__is_audio_ext(self.ext):
if folder == self.__voice_record:
self.__create_voice_record(data, folder, file_name)
elif folder == self.__voice_message:
self.__create_voice_message(data, folder, file_name)
else:
return "Response cannot be constructed."
self.s3_client.put_object(Body=bytes, Bucket=self.bucket_name, Key=folder + "/" + file_name)
return "Successfully created at URL " \
+ self.bucket_url + self.bucket_name + "/" + folder + "/" + file_name
else:
return "Invalid file type"
Run Code Online (Sandbox Code Playgroud)
另外,下面是我如何设置 boto3
def __init__(self):
self.ext = ""
self.env = {
"aws_access_key_id": settings.AWS_ACCESS_KEY_ID,
"aws_secret_access_key": settings.AWS_SECRET_ACCESS_KEY,
"region_name": 'eu-central-1'
}
self.bucket_name = "********"
self.session = session.Session(region_name='eu-central-1')
self.s3_client = self.session.client('s3', config=boto3.session.Config(signature_version='s3v4'))
self.bucket_url = "http://s3-eu-central-1.amazonaws.com/"
Run Code Online (Sandbox Code Playgroud)
当我向我的服务器发出 PUT 请求时,这是我得到的错误:
调用 PutObject 操作时发生错误 (AccessDenied):拒绝访问”
请注意,我创建了 IAM 用户并授予它使用 S3 的完全权限,并且我确信我使用的是正确的凭据。这很容易理解,因为我实际上可以从本地上传文件。
这就是为什么我认为问题出在我请求中的文件和部署项目之间的原因。但这对我来说似乎仍然不正确。无论如何,不要听我的,我在这里很困惑。
请不要犹豫,问我你不明白的地方。我可能会跳过清除某些点。
我正在研究它几个小时,但无法提出任何适当的解决方案,所以我会很高兴得到任何帮助!
谢谢!
| 归档时间: |
|
| 查看次数: |
1395 次 |
| 最近记录: |