我今天花了几个小时的时间研究,离解决问题很近,但显然需要一些已经成功完成此操作的人的帮助。我正试图从iPhone上传一张图片到Web服务。首先我会贴出代码,然后解释我尝试过的所有内容:
NSData *imageData = UIImageJPEGRepresentation(barCodePic, .9);
NSString *soapMsg =
[NSString stringWithFormat:
@"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><WriteImage xmlns=\"http://myserver/imagewebservice/\"><ImgIn>%@</ImgIn></WriteImage></soap:Body></soap:Envelope>", [NSData dataWithData:imageData]
];
NSURL *url = [NSURL URLWithString:@"http://myserver/imagewebservice/service1.asmx"];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength =
[NSString stringWithFormat:@"%d", [soapMsg length]];
[req addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[req addValue:@"http://myserver/imagewebservice/WriteImage" forHTTPHeaderField:@"SOAPAction"];
[req addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[req setHTTPMethod:@"POST"];
[req setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]];
conn = [[NSURLConnection alloc] initWithRequest:req delegate:self];
if (conn) {
webData = [[NSMutableData data] retain];
}
首先,这段代码对于除了图片之外的任何内容都可以正常工作。Web服务正在我的本地网络上运行,我可以随意更改源代码,如果我将"ImgIn"参数更改为字符串并传递一个字符串,一切都可以正常工作,我可以轻松获得返回值。因此,根本没有连接问题,我能够在该服务器上调用并获取数据,没有任何问题。但是,我需要通过ImgIn参数上传图像到这个Web服务,所以上面的代码是我迄今为止最好的尝试。我还处理了didReceiveResponse、didReceiveData、didFailWithError等所有内容。上面的代码每次都会触发didRecieveResponse。然而,didReceiveData从未触发过,就像Web服务本身从未运行过一样。当我调试Web服务本身时,使用字符串参数时它可以正常运行和调试,但是使用图像参数时,即使我调用它,它也从未调试过。就像ImgIn参数太长(当我将其输出到屏幕时很大)并且Web服务无法处理它一样。我已经阅读了关于在使用此方法时必须进行Base64编码的内容,但是我找不到任何关于如何完成这项工作的好链接。如果这就是我的错误所在,请提供如何执行此操作的代码,而不仅仅是“您需要使用Base64”,我真的很感激,因为我几乎找不到任何有关如何使用示例实现此操作的内容。除此之外,我有点迷失了方向,似乎我在做其他一切都是正确的。请帮忙!
谢谢