MuraliMohan
MuraliMohan

Reputation: 1093

How to send image as parameters (param) with POST with AFNetworking

I need to send image as param like

URl : some API 

params : {profileImage:string(file)}

Means in param list only i have to send image file as string.

i used the below code. but it is not working.

NSData *dataImage = [[NSData alloc] init];
dataImage = UIImagePNGRepresentation(selectedImage);

NSString *stringImage = [dataImage base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

NSDictionary *params = {profileImage : stringImage}
NSString *url = [NetworkRoutes postProfileImageAPIWithMobileNumber:[PTUserDetails getMobileNumber]];

self.operationManager = [AFHTTPSessionManager manager];
self.operationManager.responseSerializer = [AFJSONResponseSerializer serializer]; //
[self.operationManager.requestSerializer setAuthorizationHeaderFieldWithUsername:@“userName” password:@“some password”];

[self.operationManager POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {

    NSError *error;
    if (![formData appendPartWithFileURL:[NSURL fileURLWithPath:path] name:@"file" fileName:[path lastPathComponent] mimeType:@"image/jpg" error:&error]) {
        NSLog(@"error appending part: %@", error);
    }
} progress:^(NSProgress * _Nonnull uploadProgress) {

} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

}];

your answer no need to be in afnetworking , can also be in nsurlconnection

I am getting resposne { response :"Please upload image file" }

OR


Suggest me how to do like in the attached screen shot . In post man i am getting response enter image description here

Upvotes: 1

Views: 1186

Answers (3)

TheHungryCub
TheHungryCub

Reputation: 1960

Try to send like following (one of the below) way:

1.

     -(void)uploadimage{
            AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://your server.url"]];

            NSData *imageData = UIImageJPEGRepresentation(self.avatarView.image, 0.5);

// if you want to pass another parameter with image then 

        NSDictionary *param = @{@"username": self.username, @"password" : self.password};


            AFHTTPRequestOperation *operation = [manager POST:@"rest.of.url" parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
                //do not put image inside parameters dictionary, but append it!
                [formData appendPartWithFileData:imageData name:paramNameForImage fileName:@"photo.jpg" mimeType:@"image/jpeg"];

            } success:^(AFHTTPRequestOperation *operation, id responseObject) {
                NSLog(@"Success: %@ ***** %@", operation.responseString, responseObject);

            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

     NSLog(@"Error: %@ ***** %@", operation.responseString, error);

     }];
            [operation start];
        }

2.

 UIImage *image = [UIImage imageNamed:@"imageName.png"];
NSData *imageData = UIImageJPEGRepresentation(image,1);


NSString *queryStringss = [NSString stringWithFormat:@"http://your server/uploadfile/"];
queryStringss = [queryStringss stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];


[manager POST:queryStringss parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
 {


     [formData appendPartWithFileData:imageData name:@"fileName" fileName:@"imageName.png" mimeType:@"image/jpeg"];



 }
      success:^(AFHTTPRequestOperation *operation, id responseObject)
 {



    NSDictionary *dict = [responseObject objectForKey:@"Result"];

    NSLog(@"Success: %@ ***** %@", operation.responseString, responseObject);


 }
      failure:^(AFHTTPRequestOperation *operation, NSError *error)
 {

     NSLog(@"Error: %@ ***** %@", operation.responseString, error);
 }];

Upvotes: 0

Ashish Thakkar
Ashish Thakkar

Reputation: 944

If you send your image in multipart then this might be helpful and easiest way than BASE64

and also no need to convert your image into BASE64 String.

- (void)uploadImage:(UIImage*)image withParams:(NSDictionary*)paramsDict withURL:(NSString *)URL
{

NSData *imageData =  UIImageJPEGRepresentation(image, 1.0);
AFHTTPRequestOperationManager *manager = 

[AFHTTPRequestOperationManager manager];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];

[manager POST:URL parameters:paramsDict constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

        if (imageData!=nil) {
            [formData appendPartWithFileData:imageData name:@"imagename" fileName:@"filename" mimeType:@"image/jpeg"];
        }

    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"success = %@", responseObject);
        [appDelegate dismissLoading];
        if ([[responseObject valueForKey:@"code"] isEqualToString:@"200"])
        {
            // code after success
        }

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        [appDelegate dismissLoading];
        NSLog(@"error = %@", error);
    }];
}

Upvotes: 0

Anjali Bhimani
Anjali Bhimani

Reputation: 787

 NSData *imgData = UIImageJPEGRepresentation(image, 1.0);
    NSUInteger fileSize = [imgData length];
    if(fileSize>400000)
    {
        float size = (float)((float)400000/(float)fileSize);
        imgData = [NSData dataWithData:UIImageJPEGRepresentation(image,    size)];
    }

    NSString *imgProfilePic = [imgData base64Encoding];
    and then you can send this imgProfilePic to Webservice 

Upvotes: 3

Related Questions