Построение простого HTTP-запроса Post для отправки одного изображения с iPhone - PullRequest
1 голос
/ 24 сентября 2010

Я пытаюсь отправить одно изображение из приложения для iPhone на мой Java-сервер Google App Engine. На сервере я получаю FileUploadBase$InvalidContentTypeException, который выдается, когда запрос не является составным запросом. ServletFileUpload.isMultipartContent(req) печатает ложь. Я пытаюсь отправить изображение, закодированное в формате jpeg, и несколько других параметров, но я проверяю только "имя" и изображение. В Интернете есть несколько фрагментированных источников информации, демонстрирующих, как взять изображение с iPhone и отправить его на сервер GAE. Я хотел бы задокументировать оба конца процесса здесь.

Вот мой код цели-c:

NSData *imageData = [NSData dataWithData: UIImageJPEGRepresentation(theImageView.image, 1.0f)];
NSURL *url = [NSURL URLWithString:@"http://myurl.com/myservlet"];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:url];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setTimeoutInterval:60.0];
[request setHTTPMethod:@"POST"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithString:@"Content-Type: multipart/form-data; boundary=\"6G+f\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

 [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"name\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"whatever"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"myImage\" filename=\"ipodfile.jpeg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];

    [body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 

    [body appendData:imageData];

    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

    [request setHTTPBody:body];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
 NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

 NSLog(@"return %@",returnString);

Я взял большую часть кода Java здесь: Как загрузить и сохранить изображение с помощью Google App Engine (Java) . Я опубликую полное решение, как только будет обнаружена проблема target-c. СПАСИБО !!

1 Ответ

3 голосов
/ 24 сентября 2010

Удалите весь этот код и начните использовать ASIHTTPRequest для ваших нужд http-клиента. Это намного проще и мощнее. Я создаю серверные интерактивные приложения, которые включают загрузку изображений, и я не прикасался к собственному интерфейсу NSURLConnection буквально месяцы.

В этой библиотеке есть объект ASIFormDataRequest, который обрабатывает все маленькие кусочки конфигурации для вас. Вы буквально загружаете его данными, запускаете, и это работает.

http://allseeing -i.com / ASIHTTPRequest / Как в использовании

...