1

我最近尝试学习如何使用Amazon AWS iOS SDK,因为我想将一些文件放在允许应用程序用户下载的服务器上。AWSS3TransferManagerErrorCancelled是什么意思,以及如何摆脱它?

我有下载Amazon提供的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

经过一番研究,最后我发现它是Permissions问题。

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

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

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

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