Search code examples
iospostafnetworkingafnetworking-3

AFNetworking 3.x post request with data and image


I want to send a post request to my backend that contains some data and an UIImage as NSData Object. Problem is, I have no idea how to to that with AFNetworking 3.0.

My code so far:

NSString *url = [NSString stringWithFormat:@"%@%@", baseURL, @"/postProjectNote"];

NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];

[dic setObject:session forKey:@"session"];
[dic setObject:timestamp forKey:@"timestamp"];
[dic setObject:project_id forKey:@"project_id"];
[dic setObject:type forKey:@"type"];

NSData imagedata = UIImageJPEGRepresentation(myUIImage, 0.8);

I don't need any sort of progress bar. I just need an result if the request was successful or not. The backend (Laravel 5) gives me a json string. I need to sent it with form-data.

Can you help me getting started?


Solution

  • Use this code to post an image using AFNetworking:

    AFHTTPRequestOperationManager* manager = [[AFHTTPRequestOperationManager alloc] init];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];
    
    NSData *imageData = UIImageJPEGRepresentation(image, 0.5);
    NSMutableDictionary *paramDict = [NSMutableDictionary new]; // Add additional parameters here
    AFHTTPRequestOperation *op = [manager POST:UPDATE_PROFILE_IMAGE parameters:paramDict constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileData:imageData name:@"file" fileName:@"filename" mimeType:@"image/jpeg"];
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        if (success) {
            // Success
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        // Failure
    }];
    [op start];