s3 Bucket Image upload issue in iOS (Objective C)

372 views Asked by At

I am trying to upload images to s3 bucket from my Xcode Project for the very first time it works perfectly fine but after uploading one image it gives me error each time following is the error

AWSiOSSDK v2.4.12 [Error] AWSCredentialsProvider.m line:577 | __44-[AWSCognitoCredentialsProvider credentials]_block_invoke.353 | Unable to refresh. Error is [Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=10 "(null)" UserInfo={__type=ResourceNotFoundException, message=IdentityPool 'us-west-2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' not found.}]

And code That i am using is this

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.

AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc]
                                                      initWithRegionType:AWSRegionUSEast1
                                                      identityPoolId:@"us-west-2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"];

AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider];

[AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration;
return YES;}

-(void)uplaodImageToS3 :(NSString *)userId
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"user_%@.png", userId]];

    NSData *imageData = UIImagePNGRepresentation(uploadedImage);
    [imageData writeToFile:path atomically:YES];

    NSURL *url = [[NSURL alloc] initFileURLWithPath:path];

    _uploadRequest = [AWSS3TransferManagerUploadRequest new];
    _uploadRequest.bucket = @"dellonybucket";
    _uploadRequest.ACL = AWSS3ObjectCannedACLPublicRead;
    _uploadRequest.key = [NSString stringWithFormat:@"images/user_%@.png", userId];
    _uploadRequest.contentType = @"image/png";
    _uploadRequest.body = url;


    __weak RegistrationViewController *weakSelf = self;

    _uploadRequest.uploadProgress = ^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend){

        dispatch_sync(dispatch_get_main_queue(), ^{

            weakSelf.sizeUplaoded = totalBytesSent;
            weakSelf.filesize = totalBytesExpectedToSend;
            [weakSelf update];

        });

    };

    AWSS3TransferManager *transferManager = [AWSS3TransferManager defaultS3TransferManager];
    [[transferManager upload:_uploadRequest]continueWithExecutor:[AWSExecutor mainThreadExecutor] withBlock:^id _Nullable(AWSTask * _Nonnull task) {
        if (task.error) {

            //NSLog(@"%@",task.error);
            [self hideHud];
            [self alertView:@"Image uplaoding failed please try again." title:@"Unsuccessfull"];

               }

               if (task.result) {
                   //AWSS3TransferManagerUploadOutput *uploadOutput = task.result;
                   [self hideHud];
                   [self alertView:@"User registerd successfully." title:@"Successfull"];


               }
        return nil;
    }];
} 
1

There are 1 answers

0
Jeff Bailey On

It looks like you're telling the credentials provider to look at us-east-1, but your identity pool is in us-west-2. Since it doesn't exist in us-east-1, you get that resource not found error.

If you update the region AWSRegionUSEast1, you should be good to go.