我尝试使用AWSS3transferutility从aws s3存储桶下载照片,并将它们显示在ios应用程序的imageView中,但是,这给了我拒绝访问错误。我确信该存储桶是向公众开放的,并且我设置了Cognito,所以我不知道为什么会发生这种情况,有人会想到吗?
func getPicture() {
let tranferUtility = AWSS3TransferUtility.default()
let expression = AWSS3TransferUtilityDownloadExpression()
tranferUtility.downloadData(fromBucket: bucket, key: self.currentQuestionData!._userId!, expression: expression){ (task, url, data, error) in
if error != nil{
print(error!)
}
DispatchQueue.main.async(execute: {
self.imageView.image = UIImage(data: data!)
})
}
}
//bucket policy
{
"Id": "Policy1562706569188",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1562706565258",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::schooled-deployments-mobilehub-969166170",
"Principal": "*"
}
]
}
控制台中显示的错误消息是
“错误域= com.amazonaws.AWSS3TransferUtilityErrorDomain代码= 2 “(null)” UserInfo = {服务器= AmazonS3,错误= { 代码= AccessDenied; HostId =“ GHIlY6U4nxxqKQ / Bn8lf3FWjFZZmVhxn3DDjc8YUZY2gkguT6qdqhS54PL85AL7KaSU0Q9gSckw =”; 消息=“访问被拒绝”; RequestId = EA34AC42C00AE399;“
答案 0 :(得分:1)
某些操作在 bucket 上执行,而其他操作在 object 级别上执行。
替换此行:
"Resource": "arn:aws:s3:::schooled-deployments-mobilehub-969166170",
与此:
"Resource": [
"arn:aws:s3:::schooled-deployments-mobilehub-969166170",
"arn:aws:s3:::schooled-deployments-mobilehub-969166170/*"
]
这将允许访问对象。
答案 1 :(得分:0)
好吧,我也遇到了同样的错误,并一直在思考为什么我应该公开该存储桶以解决该错误。然后我意识到自己犯了一种愚蠢的错误。当我通过Amplify CLI($ amplify add storage)添加此存储时,有一个选项要求“ Auth users”或“ Auth&Guest”。之后,有一些选择,例如
我只选择了选项1,创建/更新,假设所有可以创建的用户仍然可以看到。那就是错误。我需要同时选择选项1和2。哪种类型才有意义。
我必须删除我的存储并添加回去调试它。然后它也开始工作以进行下载和上传。请记住,受保护的公用文件夹也很重要。
希望这可以帮助遇到相同问题的人。