How to post audio, image and string data all together onto the server in ios7

199 views Asked by At
NSMutableURLRequest *request= [[NSMutableURLRequest alloc] init];


/////// for image

NSString *filename = @"duck1.jpeg";

NSData *user_post_image = UIImageJPEGRepresentation([UIImage imageNamed:@"duck1.jpeg"], 0.5);

[request setURL:[NSURL URLWithString:combineDocUrl]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *postbody = [NSMutableData data];

[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"user_post_image\"; filename=\"%@.jpg\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[NSData dataWithData:user_post_image]];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];


////////// for original audio data

//NSString *contentType1 = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
//[request addValue:contentType1 forHTTPHeaderField: @"Content-Type"];


NSString * user_original_post_audiopath = [[NSBundle mainBundle] pathForResource:@"inputRecordedFile" ofType: @"wav"];

NSData *user_original_post_audio = [NSData dataWithContentsOfFile:user_original_post_audiopath];

[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"user_original_post_audio\"; filename=\"%@\"\r\n", user_original_post_audiopath] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[NSData dataWithData:user_original_post_audio]];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];


////////// for user post audio data

// NSString *contentType2 = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; // [request addValue:contentType2 forHTTPHeaderField: @"Content-Type"];

NSString * user_post_audiopath = [[NSBundle mainBundle] pathForResource:@"convertedWavFile_DonaldDuck" ofType: @"wav"];

NSData *user_post_audio= [NSData dataWithContentsOfFile:user_post_audiopath];

[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"user_post_audio\"; filename=\"%@\"\r\n", user_original_post_audiopath] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[NSData dataWithData:user_post_audio]];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];


//////// for string data

//Append userid
[postbody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"user_id\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"%@\r\n", userID] dataUsingEncoding:NSUTF8StringEncoding]];


//Append post text
[postbody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"post_text\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"%@\r\n", postStringText] dataUsingEncoding:NSUTF8StringEncoding]];

//Append filtername
[postbody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"filter_name\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"%@\r\n", filterName] dataUsingEncoding:NSUTF8StringEncoding]];


[request setHTTPBody:postbody];

NSData *jsonData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

if (jsonData) {

    NSString *str = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    NSLog(@"str: %@", str);
    // Parse the retrieved JSON to an NSArray
    NSError* e;

    NSDictionary* JSON =
    [NSJSONSerialization JSONObjectWithData: jsonData
                                    options: NSJSONReadingMutableContainers error: &e];

    NSArray *jsonArray = [JSON allKeys];

    for (NSString *key in jsonArray) {
        NSLog(@"%@ : %@",key, [JSON objectForKey:key]);

    }
}

I want to post 2 audio files, 1 image and 3 string values to server, our server using json request- response format and requested to send it as multi-part form data. So am confused in this how do i implement it. I sent simple string data but did not understand it clearly to send image and audio data together. So here is code where i tried to send all parameters like this but server responds me with some html file text. am not getting where am wrong. Plz suggest something to find out the mistake in this code.

0

There are 0 answers