我正在尝试将我的iPhone应用中的单个图像发送到我的Google App Engine Java服务器。在服务器上,我得到一个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代码:How to upload and store an image with google app engine (java)。一旦找到objective-c问题,我将发布完整的解决方案。谢谢!
答案 0 :(得分:3)
废弃所有代码并开始使用ASIHTTPRequest满足您的http客户端需求。它更容易,更强大。我构建了高度服务器交互式应用程序,其中包括图像上传,我几个月没有触及原生NSURLConnection接口。
该库有一个ASIFormDataRequest对象,可以为您处理所有繁琐的小部分配置。你真的用数据加载它,激活它,它就可以工作。