AFNetworking 3.x post request with data and image

时间:2016-04-04 16:45:42

标签: ios post afnetworking afnetworking-3

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?

2 个答案:

答案 0 :(得分:2)

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];

答案 1 :(得分:0)

   NSData *imageData = UIImageJPEGRepresentation(image, 0.5);    
   AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
   manager.responseSerializer = [AFJSONResponseSerializer serializer];
   [manager.requestSerializer setValue:token forHTTPHeaderField:@"Authorization"];
   [manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
   manager.responseSerializer.acceptableContentTypes =[NSSet setWithObjects:@"text/html",@"application/json",nil];

   [manager POST:encoded parameters:"the params you want to pass" constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
    [formData appendPartWithFileData:imageData
                                name:"image name with timestamp"
                            fileName:@"image_upload_file"
                            mimeType:[NSString mimeTypeForImageData:data]];
} progress:^(NSProgress * _Nonnull uploadProgress) {
    //DLog(@"Progress  = %@",uploadProgress);
} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    //DLog(@"Response  = %@",responseObject);
    completion(YES,responseObject,nil);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    completion(NO,nil,error);
    //DLog(@"Error: %@", error);
}];