1

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

我已经下载了亚马逊提供 的示例并进行了研究: 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意思,但没有运气。

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

4

1 回答 1

1

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

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

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

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

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

于 2014-12-06T02:31:33.767 回答