Objective C
#pragma mark - UIImagePickerControllerDelegate
#pragma mark - UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
[self.pictureImageView setImage:image];
[self showActivityIndicator];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[Server sharedInstance] uploadProfileImage:info user:self.user callback:^(ServerResponse *serverResponse) {
[self hideActivityIndicator];
}];
});
}
- (void)uploadProfileImage:(NSDictionary*)imageInfo user:(User*)user callback:(void (^)(ServerResponse* serverResponse))callback
{
UIImage *image = [imageInfo valueForKey:UIImagePickerControllerOriginalImage];
NSURL *referenceURL = [imageInfo valueForKey:UIImagePickerControllerReferenceURL];
NSString * ext = [self _extentionFromReferenceURL:[referenceURL absoluteString]];
NSData* data = nil;
if ([ext isEqualToString:@"jpeg"]) {
data = UIImageJPEGRepresentation(image, 0);
} else {
data = UIImagePNGRepresentation(image);
}
AFJSONRequestSerializer* reqSerializer = [self _newSerializer];
[reqSerializer setValue: [NSString stringWithFormat:@"JWT %@", [Preferences apiToken]] forHTTPHeaderField:@"Authorization"];
[reqSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];
[self.netmanager setRequestSerializer:reqSerializer];
[self.netmanager PATCH:[NSString stringWithFormat:@"user-profiles/%@/", user.profile.profileId] parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
NSString* mimeType = [NSString stringWithFormat:@"image/%@", ext];
[formData appendPartWithFileData:data
name:@"profile_picture"
fileName:[NSString stringWithFormat:@"profile-picture.%@", ext] mimeType:mimeType];
// etc.
} progress:nil success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"Response object: %@", responseObject);
[self _checkAndHandleErrorIfAny:responseObject noErrorCallback:^(id response) {
callback([[ServerResponse alloc] initWithObject:nil]);
} retryCallback:^{
[self uploadProfileImage:imageInfo user:user callback:callback];
} errorCallback:^(NSError *error) {
callback([[ServerResponse alloc] initWithError:error]);
}];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"Error: %@", error);
callback([[ServerResponse alloc] initWithError:error]);
}];
}
Swift
// Using alamofire
func uploadProfilePicture(_ image : UIImage, completion:@escaping(_: Any?)->Void) {
let imageData = UIImageJPEGRepresentation(image , 1)
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(imageData!, withName: <parameter_name>, fileName: "swift_file\(arc4random_uniform(100)).jpeg", mimeType: "image/jpeg")
// for key in parameters.keys{
// let name = String(key)
// if let val = parameters[name!] as? String{
// multipartFormData.append(val.data(using: .utf8)!, withName: name!)
// }
// }
}, to: "\(URLs.addProfilePicture)/0", method: .post, headers: getRequestHeaders()) { (result) in
switch result {
case .success(let upload, _, _):
upload.uploadProgress(closure: { (Progress) in
print(Progress)
})
upload.response(completionHandler: { (response) in
print(response)
})
case .failure(let encodingError):
completion(nil)
}
}
}
Swift
// Using alamofire
func uploadProfilePicture(_ image : UIImage, completion:@escaping(_: Any?)->Void) {
let imageData = UIImageJPEGRepresentation(image , 1)
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(imageData!, withName: <parameter_name>, fileName: "swift_file\(arc4random_uniform(100)).jpeg", mimeType: "image/jpeg")
// for key in parameters.keys{
// let name = String(key)
// if let val = parameters[name!] as? String{
// multipartFormData.append(val.data(using: .utf8)!, withName: name!)
// }
// }
}, to: "\(URLs.addProfilePicture)/0", method: .post, headers: getRequestHeaders()) { (result) in
switch result {
case .success(let upload, _, _):
upload.uploadProgress(closure: { (Progress) in
print(Progress)
})
upload.response(completionHandler: { (response) in
print(response)
})
case .failure(let encodingError):
completion(nil)
}
}
}