简体   繁体   English

如何在AWS s3中上传图像,上传时出错

[英]How to Upload Image in AWS s3 , getting error at upload time

I am Using latest SDK library of amazon for upload image to bucket. 我正在使用亚马逊的最新SDK库将图像上传到存储桶。 but getting error, here is my code 但是遇到错误,这是我的代码

App Delegate code 应用代表代码

- (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;
}

My View Controller Code is 我的View Controller代码是

    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];

But Every time getting error like this 但是每次遇到这样的错误

 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.}]

The supported endpoints for Cognito Identity are (taken from here: http://docs.aws.amazon.com/general/latest/gr/rande.html#cognito_identity_region ): Cognito身份支持的端点是(从此处获取: 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

It looks like Cognito Identity is not supported in the Singapore region (ap-southeast-1). 看起来新加坡地区(ap-southeast-1)不支持Cognito身份。 Try a different region from the list above. 尝试使用上面列表中的其他区域。

Amazon Cognito Identity currently is only available in us-east-1, eu-west-1, and ap-northeast-1. Amazon Cognito身份当前仅在us-east-1,eu-west-1和ap-northeast-1中可用。 When instantiating the AWSCognitoCredentialsProvider you will need to use the region that your Cognito Identity Pool was created in. 实例化AWSCognitoCredentialsProvider时,您将需要使用创建Cognito身份池的区域。

You can still use the credentials obtained by Cognito Identity for other services in other regions. 您仍然可以将Cognito Identity获得的凭据用于其他地区的其他服务。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM