AWSS3TransferManagerErrorCancelled是什么意思以及如何摆脱它?

时间:2014-12-04 15:52:48

标签: ios objective-c amazon-web-services amazon-s3 amazon-cognito

我最近尝试学习如何使用Amazon AWS iOS SDK,因为我想在服务器上放一些文件,允许app用户下载。

我已下载亚马逊提供的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的值,发现它是1AWSS3TransferManagerErrorCancelled)。 由于AWSS3TransferManagerErrorCancelled没有异常处理,程序不会显示错误消息,也无法下载文件。

我试图找到AWSS3TransferManagerErrorCancelled的意思,但没有运气。

有谁知道为什么错误代码= 1AWSS3TransferManagerErrorCancelled)以及如何解决?我相信我必须错过一些非常简单的东西,因为这是亚马逊提供的教程。

1 个答案:

答案 0 :(得分:1)

经过一些研究,最后我发现它是权限问题。

因此,当我创建身份池时,系统会询问您是否要启用对未经身份验证的身份的访问权限。 如果您启用此选项,AWS将为您提供默认的未经身份验证的身份,后缀为Unauth_DefaultRole。 事情是AWS不会自动授予" Get"这个身份。 您仍然需要将此Action添加到xxxUnauth_DefaultRole的策略中。

因此,这是我修改后的策略,允许未经身份验证的用户从我的存储桶中下载文件。

{
"Version": "2012-10-17",
"Statement": [{
    "Action": [
        "mobileanalytics:PutEvents",
        "cognito-sync:*",
        "s3:ListBucket",
        "s3:Get*"
    ],
    "Effect": "Allow",
    "Resource": [
        "*"
    ]
}]
}

希望这可以帮助那些也是AWS新手的人。