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 -
# 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.
//
// 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
No comments:
Post a Comment