Я создал клиент API для связи с моим веб-сервером, и все HTTP-запросы в моем приложении выполняются с использованием этого класса: (подкласс AFHTTPRequestOperationManager)
+ (SNPAPIClient *)sharedClient {
static SNPAPIClient *_sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSURL *baseURL = [NSURL URLWithString:BASE_URL];
_sharedClient = [[SNPAPIClient alloc] initWithBaseURL:baseURL];
_sharedClient.responseSerializer = [AFJSONResponseSerializer serializer];
_sharedClient.requestSerializer = [AFJSONRequestSerializer serializer];
});
return _sharedClient;
}
Класс имеет 3 метода для POST, GET и POST-MULTIPART. Хотя методы POST и GET работают отлично, у меня возникают проблемы с POST-MULTIPART.
-(void)httpPOSTMultiPartRequestWithPath:(NSString*)path Parameters:(NSDictionary*)parameters BodyBlock:(id)bodyBlock Completion:(APICompletionBlock)apiComp{
comp = apiComp;
[self POST:path
parameters:parameters
constructingBodyWithBlock:bodyBlock
success:^(NSURLSessionDataTask *task, id responseObject) {
comp(responseObject,nil);
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
comp(nil,error);
}];
}
В частности, я пытаюсь отправить на сервер простой JSON, за которым следует изображение. Я пытался сделать что-то вроде этого:
С моего контроллера я звоню:
NSDictionary *POSTpic = [NSDictionary dictionaryWithObjectsAndKeys:@"109",@"userId",@"P",@"contentType", nil];
NSURL *pictuePath = [NSURL fileURLWithPath:@"cat.JPG"];
[[SNPAPIClient sharedClient]httpPOSTMultiPartRequestWithPath:@"PATH_GOES_HERE"
Parameters:POSTpic
BodyBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileURL:pictuePath name:@"profile" error:nil];
}
Completion:^(id serverResponse, NSError *error){
if (serverResponse){
NSLog(@"success");
}else{
NSLog(@"error: %@",error);
}
}];
Отправляя этот запрос, я получаю следующую ошибку в отладчике:
internal server error (500)" UserInfo=0xb681650 {NSErrorFailingURLKey=http://"my_path", AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xb347d40> { URL: http://"my_path" } { status code: 500, headers {
"Content-Length" = 142;
"Content-Type" = "text/plain";
Date = "Wed, 06 Nov 2013 19:26:05 GMT";
"Proxy-Connection" = "Keep-alive";
Server = "nginx admin";
} }, NSLocalizedDescription=Request failed: internal server error (500)}
По какой-то причине, несмотря на то, что я отправляю NSDictionary, а для моего запроса Serilaizer установлено значение AFJSONRequestSerializer, объект JSON не создается. Опять же, это происходит только с POST MULTIPART, другие запросы, сделанные с тем же клиентом и настройками, обрабатываются правильно.
Спасибо!