【问题标题】:Constructing a simple HTTP Post request to send a single image from iPhone构造一个简单的 HTTP Post 请求以从 iPhone 发送单个图像
【发布时间】:2011-04-16 17:03:46
【问题描述】:

我正在尝试将单个图像从我的 iPhone 应用程序发送到我的 Google App Engine Java 服务器。在服务器上,我得到一个FileUploadBase$InvalidContentTypeException,当请求不是多部分请求时抛出。 ServletFileUpload.isMultipartContent(req) 打印错误。我正在尝试发送一个图像,编码为 jpeg 和一些其他参数,但我只使用“名称”和图像进行测试。网上有一些零散的信息来源演示了如何从 iPhone 中获取图像并将其发布到 GAE 服务器。我想在这里记录这个过程的两端。

这是我的 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问题,我将发布完整的解决方案。谢谢!!

【问题讨论】:

    标签: iphone objective-c google-app-engine nsurlconnection http-post


    【解决方案1】:

    放弃所有代码并开始使用 ASIHTTPRequest 来满足您的 http 客户端需求。它更容易,更强大。我构建了高度与服务器交互的应用程序,其中包括图像上传,而且我已经有几个月没有接触过原生的 NSURLConnection 接口了。

    该库有一个 ASIFormDataRequest 对象,可以为您处理所有繁琐的配置。你实际上是用数据加载它,触发它,它就可以工作了。

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

    【讨论】:

    • 我这样做了。我昨天尝试这样做,但与 Reachability 发生冲突(应用程序的不同部分使用 1.5 并且不喜欢新版本,这显然是 ASIHTTPRequest 所必需的)。我只是将两个版本都包含在不同的名称下,并且现在一切正常。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多