Я работал над этим несколько часов сегодня, и я довольно близок к решению, но, очевидно, мне нужна помощь кого-то, кто справился с этим. Я пытаюсь опубликовать изображение на веб-сервис с iPhone. Сначала я выложу код, затем объясню все, что я пробовал:
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];
}
Во-первых, этот код отлично работает для всего, кроме изображения. Веб-сервис работает в моей локальной сети, и я могу изменить исходный код по желанию, и если я изменю параметр «ImgIn» на строку и передам строку, все работает нормально, возвращаемое значение без проблем. Так что проблем с подключением нет вообще, я могу звонить и получать данные из этого веб-сервиса на этом сервере без проблем. Но мне нужно загрузить изображение в этот веб-сервис через параметр ImgIn, поэтому приведенный выше код - мой лучший снимок. Я также обработал все функции: ReRereResponse, DidReceiveData, didFailWithError и т. Д. Приведенный выше код запускает didRecieveResponse каждый раз. Однако didReceiveData никогда не запускается, и это похоже на то, что сам веб-сервис никогда даже не запускается. Когда я отлаживаю сам веб-сервис, он работает и отлаживается нормально, когда я использую строковый параметр, но с параметром изображения он даже не отлаживается, когда я его вызываю. Похоже, что параметр ImgIn слишком длинный (он огромен, когда я вывожу его на экран), и веб-служба просто его подавляет. Я читал о необходимости кодировать в Base64 при использовании этого метода, но я не могу найти хорошие ссылки о том, как это делается. Если это то, что я делаю неправильно, ПОЖАЛУЙСТА, можете ли вы предоставить код о том, как это сделать, а не просто «вам нужно использовать Base64», я был бы очень признателен, поскольку почти ничего не могу найти, как реализовать это с помощью пример. Кроме этого, я вроде как потерян, похоже, что я все делаю правильно. Пожалуйста, помогите!
Спасибо