swift - 尝试从 aws s3 存储桶下载图片时访问被拒绝
问题描述
我尝试使用 AWSS3transferutility 从 aws s3 存储桶下载照片并将它们显示在 ios 应用程序的 imageView 上,但是,当它给我一个拒绝访问错误时。我确定存储桶对公众开放并且我设置了认知,所以我不知道为什么会发生这种情况有人知道吗?
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 “(空)” UserInfo = {服务器 = AmazonS3,错误 = { 代码 = AccessDenied;HostId = “GHIlY6U4nxxqKQ/Bn8lf3FWjFZZmVhxn3DDjc8YUZY2gkguT6qdqhS54PL85AL7KaSU0Q9gAAE399 =”;消息 =“4ACSU0Q9gAAE39EA” ;"
解决方案
一些操作在桶上执行,而其他操作在对象级别执行。
替换这一行:
"Resource": "arn:aws:s3:::schooled-deployments-mobilehub-969166170",
有了这个:
"Resource": [
"arn:aws:s3:::schooled-deployments-mobilehub-969166170",
"arn:aws:s3:::schooled-deployments-mobilehub-969166170/*"
]
这将允许访问对象。
推荐阅读
- c - 分配和填充矩阵时出现分段错误
- oracle - "order by" postgres 和 oracle 有不同的结果
- html - 有没有办法在多个语言环境中使用 i18nSelect?
- postgresql - Postgres 13 存储过程可以返回多个类似于 SQL Server 的结果集吗?
- python - 如何在python中覆盖文本文件中的一行文本
- ssl - java.io.IOException:密钥库密码不正确
- c# - 命名空间“UnityEngine.Experimental”中不存在类型或命名空间名称“Input”
- django - 在 Django Shell 中获取模型的所有字段
- javascript - 如何从html提交到nodejs
- apache-kafka - 如何查找 kafka 主题 RAM 使用情况?