2013-04-12 4 views
1

У меня есть простой вопрос: в настоящее время я пишу определенную часть своего приложения, связанную с отправкой данных на сервер.Отправка UIImage и текста на сервер

Я попытался отправить текст, преуспел. Отправлено изображение. Теперь я пытаюсь отправить их в течение одного запроса POST. Я понял, что мне нужно использовать что-то, что называется multipart/form-data и границ, но я больше не нашел об этом информации.

Так как я могу отправить и текст и изображение в один простой запрос POST? И как я могу проверить ошибки во время загрузки, потом и т. Д.?

Спасибо!

Reference код, который я написал, но отправка 0 байт информации:

NSData *imageData = UIImageJPEGRepresentation(sendImage, 1.0); 
    // setting up the request object now 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:[NSURL URLWithString:@"http://posttestserver.com/post.php?dir=something"]]; 
    [request setHTTPMethod:@"POST"]; 
    NSString *boundary = @"---------------------------54737809831466490885746641449"; 
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

    NSMutableData *body = [NSMutableData data]; 
    [body appendData:[[NSString stringWithFormat:@"rn--%@rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[@"Content-Disposition: form-data; name=\"userfile\"; filename=\"reportingImage.jpg\"rn" dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[@"Content-Type: application/octet-streamrnrn" dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[NSData dataWithData:imageData]]; 
    [body appendData:[[NSString stringWithFormat:@"rn--%@--rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[@"Content-Type: text/xml" dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[[alertView textFieldAtIndex:0] text] dataUsingEncoding:NSUTF8StringEncoding]]; 
    // setting the body of the post to the reqeust 
    [request setHTTPBody:body]; 

    // now lets make the connection to the web 
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 

    NSLog(returnString); 
+0

попробовать это http://stackoverflow.com/questions/14598044/how-to-send-image-and-text-toget ее-использование-nsmutableurlrequest – Buntylm

+0

код в этом ответе работал, огромное спасибо! –

+0

Я также даю то же самое в ответе. – Buntylm

ответ

0

Вы, вероятно, хотите использовать сетевую библиотеку, как AFNetworking и сэкономить время :)

1

Это рабочий сниппет, который посылает текст и изображения, при необходимости несколько текстов с несколькими Params на каждый

//After dismissing the alert, we get its text (user location and notes) and the picture he took 

    NSMutableData *body = [NSMutableData data]; 
    NSURL *url = [NSURL URLWithString:@"http://posttestserver.com/post.php?dir=Doda"]; //Test server, you can access it online to see the upload 
    NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url]; 
    [req setHTTPMethod:@"POST"]; 
    NSString *boundary = @"---------------------------14737809831466499882746641449"; //I have no idea what this is, but without it the code won't work 
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
    [req setValue:contentType forHTTPHeaderField: @"Content-Type"]; 

    //Attaching image 
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[@"Content-Disposition: attachment; name=\"imageOfReport\"; filename=\"imageOfReport.jpg\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[NSData dataWithData:UIImageJPEGRepresentation(sendImage, 1.0)]]; //Crucial, getting a JPEG version of the image and sending it 
    [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 

    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"report_description\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[[alertView textFieldAtIndex:0] text] dataUsingEncoding:NSUTF8StringEncoding]]; //Crucial, taking the text from the Alert and sending it 
    [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [req setHTTPBody:body]; 

    //Below are few lines which can add other parameters and text 
    /*  [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"spid\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [req setHTTPBody:body];*/ 

    NSURLConnection *sendingTheData2 = [[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES]; //Sent! ;) 
Смежные вопросы