我最近尝试学习如何使用 Amazon AWS iOS SDK,因为我想将一些文件放在允许应用程序用户下载的服务器上。
我已经下载了 samples由亚马逊提供并研究了它们: https://github.com/awslabs/aws-sdk-ios-samples/tree/master/S3TransferManager-Sample/Objective-C
在我尝试从存储桶下载图像之前,将文件上传到我的 S3 存储桶的过程非常顺利。
我跟踪代码,找到了问题发生的地方。
[[transferManager download:self.downloadRequest1] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) {
if (task.error != nil){
if(task.error.code != AWSS3TransferManagerErrorCancelled && task.error.code != AWSS3TransferManagerErrorPaused){
NSLog(@"%s Error: [%@]",__PRETTY_FUNCTION__, task.error);
self.downloadStatusLabel.text = StatusLabelFailed;
}
} else {
self.downloadRequest1 = nil;
downloadCount++;
if(3 == downloadCount){
self.downloadStatusLabel.text = StatusLabelCompleted;
}
}
return nil;
}];
我打印了 task.error.code 的值,发现它是 1
(AWSS3TransferManagerErrorCancelled
)。
由于没有AWSS3TransferManagerErrorCancelled
的异常处理,程序没有显示错误信息,下载文件失败。
我试图找到 AWSS3TransferManagerErrorCancelled
的含义,但没有成功。
有谁知道为什么错误代码 = 1
(AWSS3TransferManagerErrorCancelled
) 以及如何解决?考虑到这是亚马逊提供的教程,我相信我一定错过了一些非常简单的东西。
最佳答案
经过一番研究,终于弄明白是权限问题。
因此,当我创建身份池时,系统询问您是否要启用对未验证身份的访问。 如果您启用此选项,AWS 将为您提供一个默认的未验证身份,后缀为 Unauth_DefaultRole。 问题是 AWS 不会自动将“获取”权限授予此身份。 您仍然需要将此操作添加到 xxxUnauth_DefaultRole 的策略中。
因此,这是我修改后的策略,允许未经身份验证的用户从我的存储桶下载文件。
{
"Version": "2012-10-17",
"Statement": [{
"Action": [
"mobileanalytics:PutEvents",
"cognito-sync:*",
"s3:ListBucket",
"s3:Get*"
],
"Effect": "Allow",
"Resource": [
"*"
]
}]
}
希望这对同样是 AWS 新手的人有所帮助。
关于ios - AWSS3TransferManagerErrorCancelled 是什么意思以及如何摆脱它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27298275/