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