1

我試圖從我的iPhone應用程序發送一個圖像到我的Google App Engine Java服務器。在服務器上,我得到一個FileUploadBase$InvalidContentTypeException,當請求不是多部分請求時,會引發該請求。 ServletFileUpload.isMultipartContent(req)正在打印錯誤。我試圖發送一個圖像,編碼爲JPEG和其他一些參數,但我只是用「名稱」和圖像進行測試。網上有幾個零散的信息來源,演示如何從iPhone拍攝圖像並將其發佈到GAE服務器。我想在這裏記錄過程的兩端。構建一個簡單的HTTP Post請求從iPhone發送單個圖像

這裏是我的Objective-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代碼從這裏:How to upload and store an image with google app engine (java)。一旦發現objective-c問題,我會發布完整的解決方案。謝謝!!

回答

3

廢棄所有代碼並開始使用ASIHTTPRequest來滿足您的http客戶端需求。它更容易,更強大。我構建了包含圖像上傳的高度服務器交互式應用程序,並且我幾乎在幾個月內沒有觸及本地NSURLConnection接口。

該庫有一個ASIFormDataRequest對象,它可以爲您處理所有配置的小部件。你從字面上加載它的數據,發射它,它的工作原理。

http://allseeing-i.com/ASIHTTPRequest/How-to-use

+0

我做到了。我昨天嘗試過,但與Reachability有衝突(應用程序的另一部分使用1.5,並且不喜歡新版本,這對於ASIHTTPRequest顯然是必需的)。我只是將兩個版本都包含在不同的名字和各種東西中,現在完美地工作。謝謝 – 2010-09-24 22:17:55