我正在使用.NET Web服务开发iOS应用程序。在其中一个Web服务中,我必须在名为“ file ”的参数中将图像作为 HttpPostedFileBase 发送,该参数将返回图像URL和状态参数作为响应。其实我不确定什么是HttpPostedFileBase。但我试图将其作为字节发送。我从WS获取图像URL为null。我猜WS调用工作正常,但问题在于我发送图像的方式。我使用以下代码将图像数据附加到HTTP正文。
NSData *imageData = UIImageJPEGRepresentation(image, 1);
[postData appendData:[[NSString stringWithFormat:@"--%@\r--\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"file.jpeg\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:imageData];
[request addValue:@"application/octet-stream" forHTTPHeaderField:@"Content-Type"];
[request addValue:[NSString stringWithFormat:@"%i", [postData length]] forHTTPHeaderField:@"Content-Length"];
[postData appendData:[[NSString stringWithFormat:@"--%@\r--\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
请告诉我如何才能使其正常运作。如果您需要更多详细信息,请与我们联系。
感谢。
答案 0 :(得分:0)
对不起伙计们。问题出在HTTP标头中。 @FahriAzimov上面发布的链接(ios Upload Image and Text using HTTP POST)帮助了我。我的不好,实际上我很困惑,.NET Web服务的格式会有所不同。
我必须像正常的网络服务一样发送图像。工作代码如下:
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
[postData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\n", @"file"] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:imageData];
[postData appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
非常感谢大家的帮助。
答案 1 :(得分:-1)
使用ASIHTTPRequest库,它非常好,您可以将图像作为附件发送到您的.net服务器.... http://allseeing-i.com/ASIHTTPRequest/How-to-use
here is sample code
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
// Upload a file on disk
[request setFile:@"/Users/ben/Desktop/ben.jpg" withFileName:@"myphoto.jpg" andContentType:@"image/jpeg"
forKey:@"photo"];
// Upload an NSData instance
[request setData:imageData withFileName:@"myphoto.jpg" andContentType:@"image/jpeg" forKey:@"photo"];