1

私はamazonの最新SDKライブラリを使用してバケットに画像をアップロードしています。しかし、エラーを取得し、ここに私のコードはアップロード時にエラーが発生するAWS s3で画像をアップロードする方法

アプリケーションデリゲートコードです

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 


    AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionAPSoutheast1 
                           identityPoolId:AWS_IDENTITY_POOL_ID1]; 
    AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionAPSoutheast1 
                    credentialsProvider:credentialsProvider]; 
    AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration; 

    return YES; 
} 

私のビューコントローラコードは

AWSS3TransferManager *transferManager = [AWSS3TransferManager defaultS3TransferManager]; 
    NSString *downloadingFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"downloaded-myImage.jpg"]; 
    NSURL *downloadingFileURL = [NSURL fileURLWithPath:downloadingFilePath]; 
    imageView.image = [UIImage imageWithContentsOfFile:downloadingFilePath]; 

    AWSS3TransferManagerUploadRequest *uploadRequest = [AWSS3TransferManagerUploadRequest new]; 
    uploadRequest.bucket = @"myBucketName"; 
    uploadRequest.key = @"downloaded-myImage.jpg"; 
    uploadRequest.body = downloadingFileURL; 

    [[transferManager upload:uploadRequest] continueWithExecutor:[AWSExecutor mainThreadExecutor] 
                withBlock:^id(AWSTask *task) { 
                 if (task.error) { 
                  if ([task.error.domain isEqualToString:AWSS3TransferManagerErrorDomain]) { 
                   switch (task.error.code) { 
                    case AWSS3TransferManagerErrorCancelled: 
                    case AWSS3TransferManagerErrorPaused: 
                     break; 

                    default: 
                     NSLog(@"Error: %@", task.error); 
                     break; 
                   } 
                  } else { 
                   // Unknown error. 
                   NSLog(@"Error: %@", task.error); 
                  } 
                 } 

                 if (task.result) { 
                  AWSS3TransferManagerUploadOutput *uploadOutput = task.result; 
                  // The file uploaded successfully. 
                  NSLog(@"LOG %@", task.result); 
                 } 
                 return nil; 
                }]; 

    [transferManager upload:uploadRequest]; 

しかしたびサポートこの

AWSiOSSDKv2 [Error] AWSCredentialsProvider.m line:528 | __40-[AWSCognitoCredentialsProvider refresh]_block_invoke352 | Unable to refresh. 
Error is [Error Domain=NSURLErrorDomain Code=-1003 "A server with the specified hostname could not be found." 
UserInfo={NSUnderlyingError=0x7ffd7300a070 {Error Domain=kCFErrorDomainCFNetwork Code=-1003 "(null)" 
UserInfo={_kCFStreamErrorCodeKey=8, _kCFStreamErrorDomainKey=12}}, NSErrorFailingURLStringKey=https://cognito-identity.ap-southeast-1.amazonaws.com/, 
NSErrorFailingURLKey=https://cognito-identity.ap-southeast-1.amazonaws.com/, _kCFStreamErrorDomainKey=12, _kCFStreamErrorCodeKey=8, 
NSLocalizedDescription=A server with the specified hostname could not be found.}] 
+0

どのように認証していますか?あなたはCognitoを介して一時的なアクセスを提供しますか? – Tom

+0

@Tom私のコードを編集する –

答えて

1

現在、Amazon Cognito Identityは、米国東部1、欧州西部1、および東北部1でのみ利用可能です。 AWSCognitoCredentialsProviderをインスタンス化する際には、Cognito Identity Poolが作成された地域を使用する必要があります。

Cognito Identityで取得した認証情報は、他の地域のサービスでも引き続き使用できます。

1

のようなエラーを取得していますCognito Identityのエンドポイントは(ここから取得します:http://docs.aws.amazon.com/general/latest/gr/rande.html#cognito_identity_region):

Region Name    Region   Endpoint          Protocol 
US East (N. Virginia) us-east-1  cognito-identity.us-east-1.amazonaws.com  HTTPS 
EU (Ireland)   eu-west-1  cognito-identity.eu-west-1.amazonaws.com  HTTPS 
Asia Pacific (Tokyo) ap-northeast-1 cognito-identity.ap-northeast-1.amazonaws.com HTTPS 

Cognito Identityはシンガポール地域(ap-southeast-1)ではサポートされていないようです。上記のリストから別の地域を試してみてください。

関連する問題