Background
This post assumes you have setup Cognito identity pool as explained in the previous post -
If not, then please refer the previous post and set that up. Before starting with using this you should have -
- Identity pool ID
- AWS region where pool and S3 bucket reside
- S3 bucket name
We will use above in configuration and implementation that follows.
How to upload files to S3 from iOS app written in Objective C using AWS Cognito identity pool
- First, go to your pod file and update following dependencies -
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # Uncomment the next line to define a global platform for your project # platform :ios, '9.0' target 'TestApp' do # Uncomment the next line if you're using Swift or would like to use dynamic frameworks # use_frameworks! # Pods for TestApp pod 'AWSMobileClient' , '~> 2.6.18' # For AWSMobileClient pod 'AWSS3' , '~> 2.6.18' # For file transfers pod 'AWSCognito' , '~> 2.6.18' # For data sync end |
- Next run "Run pod install --repo-update" from the command line
- Once you have the dependencies installed we can now write Objective C code to upload a file to S3.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | // // FileUploader.m // TestApp // // Created by Aniket on 22/05/18. // # import <Foundation/Foundation.h> # import "FileUploader.h" # import <AWSS3/AWSS3.h> # import <AWSCore/AWSCore.h> @implementation FileUploader static AWSS3TransferManager *transferManager; + ( void ) initialize { if (self == [FileUploader class ]) { AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@ "us-east-1:f847843f-0162-43c2-b73f-efdc7c69cce2" ]; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider]; [AWSS3TransferManager registerS3TransferManagerWithConfiguration:[[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider] forKey:s3TransferManagerKey]; AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration; transferManager = [AWSS3TransferManager S3TransferManagerForKey:s3TransferManagerKey]; } } + ( void )uploadFile { NSURL *uploadingFileURL = [NSURL fileURLWithPath: @ "PATH_TO_FILE" ; AWSS3TransferManagerUploadRequest *uploadRequest = [AWSS3TransferManagerUploadRequest new ]; uploadRequest.bucket = s3Bucket; int timestamp = [[NSDate date] timeIntervalSince1970]; uploadRequest.key = [NSString stringWithFormat:@ "%@-%d%@" ,@ "testfile" ,timestamp,@ ".txt" ]; uploadRequest.body = uploadingFileURL; [[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 uploading file to S3: %@" , task.error); break ; } } else { // Unknown error. NSLog(@ "Error uploading file to S3: %@" , task.error); } } if (task.result) { AWSS3TransferManagerUploadOutput *uploadOutput = task.result; // The file uploaded successfully. NSLog(@ "uploading file to S3 was successful: %@" , uploadOutput); } return nil; }]; } @end |
In above code replace the identity pool id and region as per your configuration settings. This is Objective C code, if you want to see Swift or Android - Java please refer https://docs.aws.amazon.com/aws-mobile/latest/developerguide/how-to-integrate-an-existing-bucket.html