ASIFormDataRequest не отправляет данные JSON с изображением на сервер PHP

Я хочу отправить запрос POST на сервер с данными JSON и изображения. Я использую приведенный ниже код, но каждый раз при его запуске выдается следующая ошибка:

{Код = 400; Detail = "Невозможно разобрать JSON в form.request"; Ответ = Ошибка; }

Это запрос ASIFormDataRequest -

ASIFormDataRequest *asiRequest = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:urlForAPI]];
[asiRequest setTimeOutSeconds:60];

NSDictionary *dict1 = [[[NSDictionary alloc]initWithObjectsAndKeys:api_username,@"api_username",api_password,@"api_password",@"updateUser",@"method", nil] autorelease];
NSDictionary *dict2 = [[[NSDictionary alloc]initWithObjectsAndKeys:@"13",@"id",nil] autorelease];
NSDictionary *data = [[[NSDictionary alloc]initWithObjectsAndKeys:dict1,@"request",dict2,@"methodparam", nil] autorelease];

NSMutableDictionary *requestheaders =[[[NSMutableDictionary alloc]init] autorelease];
[requestheaders setValue:@"multipart/form-data; charset=utf-8; boundary=0xKhTmLbOuNdArY-8522EA03-7EA6-446F-9CAB-6EC10511FD22" forKey:@"Content-Type"];
[asiRequest setRequestHeaders:requestheaders];

NSData *jsonData = [data JSONData];
NSString *string = [[[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding] autorelease];
[asiRequest setRequestHeaders:requestheaders];

NSString *jsonString = [NSString stringWithFormat:@"REQUEST=%@",string];
NSData *requestData = [NSData dataWithBytes:[jsonString UTF8String] length:[jsonString length]];

[asiRequest setPostBody:[NSMutableData dataWithData:requestData]];
[asiRequest addData:imageData forKey:@"logo"];

[asiRequest setShouldContinueWhenAppEntersBackground:YES];
[asiRequest setDelegate:self];
[asiRequest setRequestMethod:@"POST"];
[asiRequest setDidFailSelector:@selector(uploadFailed:)];
[asiRequest setDidFinishSelector:@selector(uploadFinished:)];
[asiRequest startAsynchronous];

Если у вас есть идеи, где я ошибаюсь, люди, дайте мне знать. Любое предложение будет оценено.


person Namit Gupta    schedule 03.04.2013    source источник


Ответы (1)


попробуйте, как показано ниже, не нужно делать ничего, кроме этого.

NSURL *url = [NSURL URLWithString:@"YOUR_URL_TO_POST"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setUseKeychainPersistence:YES];
[request setData:imageData withFileName:@"img.png" andContentType:@"image/png" forKey:@"logo"];
[request setDelegate:self];
[request setDidFinishSelector:@selector(uploadRequestFinished:)];
[request setDidFailSelector:@selector(uploadRequestFailed:)];
[request startAsynchronous];

и напишите методы делегата, например,

- (void)uploadRequestFinished:(ASIHTTPRequest *)request{    

     NSString *responseString = [request responseString];
     NSLog( @"response--%@",responseString );

 }
- (void)uploadRequestFailed:(ASIHTTPRequest *)request{

  NSLog(@" Error - Statistics file upload failed: \"%@\"",[[request error]   localizedDescription]);

  }
person iSpark    schedule 03.04.2013
comment
Спасибо @murali, но я также должен отправить запрос json с данными изображения, запрос json включает в себя api_username, api_password и параметр метода, который является user_id. Если у вас есть идеи о том, как отправить словарь json с данными изображения, сообщите мне. Большое спасибо. - person Namit Gupta; 04.04.2013