【发布时间】:2017-03-17 20:22:04
【问题描述】:
我在从我的 AWS S3 存储桶(Swift/iOS 应用程序)下载文件时遇到问题。这似乎是两个问题之一,但我不知道是哪一个:
- 我的 identityPoolId 有问题
- 存储桶的区域问题
如果我这样创建凭据提供程序:
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"us-west-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"];
我收到以下错误:
[Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=10 "(null)" UserInfo={__type=ResourceNotFoundException, message=Identity 'us-west-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found.}]
我注意到创建凭证提供程序的行不匹配:regionType 是 AWSRegionUSEast1,但我将“us-west-2”作为 identityPoolId 的一部分。
如果我将 regionType 更改为 AWSRegionUSWest2(以匹配我的 id),ResourceNotFoundExeception 就会消失。但后来我明白了:
<Error><Code>PermanentRedirect</Code><Message>The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.</Message><Bucket>sportsmanregs</Bucket><Endpoint>s3.amazonaws.com</Endpoint><RequestId>AEFD833FF4E7B6F1</RequestId><HostId>mYxbBKlzTeWgVZW4W060+ESiBhWuxmfDDFE6UriXG7bqxA5NWuRbH9lu4NuGCaU/7H8f1hjAukA=</HostId></Error>
有趣的是,在完成处理程序的数据对象中发现了上述错误,如下面的“数据”中:
completionHandler = {
(task, location, data, error) -> Void in DispatchQueue.main.async( execute: {
所以completionHandler 被调用OK。在 S3 控制台中,我尝试下载的文件的 URL 以“https://s3.amazonaws.com//xxx/xxx.tiff”开头。有没有人知道这里的问题是什么?
【问题讨论】: