Загрузите изображение вместе с другими параметрами, используя AFNetworking 2
Я пытаюсь отправить изображение из моего приложения на сервер. Это сервер Windows с веб-службами.net.
Служба, которую я пытаюсь вызвать, получает три параметра: числовой идентификатор (идентификатор пользователя), сообщающий серверу, какой пользователь отправляет новое изображение, изображение в виде закодированной строки base64 и формат изображения, который всегда является.png,
Моя функция загрузки:
- (void)updateProfilePic:(UIImage *)profilePic forUser:(User *)user
{
//Encode the image in the requested format
NSData *imageData = UIImagePNGRepresentation(profilePic);
NSString *encodedString = [imageData base64EncodedStringWithOptions: NSDataBase64Encoding64CharacterLineLength];
//Build the URL string
NSURL *url = [NSURL URLWithString:BaseURL];
NSString *soapBody = [NSString stringWithFormat:
@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<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>\n"
"<UpdateUserProfilePic_iOS xmlns=\"http://mycompany.com/webservices/>\n"
"<userId>%d</userId>\n"
"<imgbinStr>%@</imgbinStr>\n"
"<imgFormat>.png</imgFormat>\n"
"</UpdateUserProfilePic_iOS>\n"
"</soap:Body>\n"
"</soap:Envelope>",
(int)user.userId, encodedString];
NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[soapBody length]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[soapBody dataUsingEncoding:NSUTF8StringEncoding]];
[request addValue:@"\"http://mycompany.com/webservices/UpdateUserProfilePic_iOS\"" forHTTPHeaderField:@"SOAPAction"];
[request addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request addValue: msgLength forHTTPHeaderField:@"Content-Length"];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFXMLParserResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){
//parse NSXMLParser object here if request successful
if ([responseObject isKindOfClass:[NSXMLParser class]]) {
XMLParser *xml = [[XMLParser alloc] init];
NSString *responseString = [xml parseResponse:responseObject];
NSLog(@"Update picture response: %@", responseString);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error){
NSLog(@"Error: %@", error);
}];
[operation start];
}
Пока что ответом является ошибка. Однако ошибка 400, что заставляет меня думать, что проблема в том, как я форматирую свой запрос:
Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: bad request (400)" UserInfo=0x7999aa20 {com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x799858c0> { URL: http://myserverIP/UserProfileSvc.asmx } { status code: 400, headers {
"Cache-Control" = private;
"Content-Length" = 0;
"Content-Type" = "text/xml; charset=utf-8";
Date = "Thu, 16 Oct 2014 00:03:53 GMT";
Server = "Microsoft-IIS/7.5";
"X-AspNet-Version" = "4.0.30319";
"X-Powered-By" = "ASP.NET";
} }, NSErrorFailingURLKey=http://myserverIP/UserProfileSvc.asmx, NSLocalizedDescription=Request failed: bad request (400), com.alamofire.serialization.response.error.data=<>}
Я не думаю, что проблема на стороне сервера. Возможно, я что-то неправильно форматирую, но не знаю, что это может быть. заранее спасибо