2010-12-11 45 views
1

J'essaie d'utiliser http POST pour envoyer un objet JSON (UIImage est inclus dans POST). Ci-dessous le code que j'utilise actuellement, mais pour une raison quelconque, le serveur ne reçoit pas le POST. Quelqu'un peut-il donner un aperçu de pourquoi cela ne fonctionne peut-être pas?HTTP Post utilisant JSON pour UIImage

NSString *userString = [[NSString alloc]init]; 
userString = [[NSUserDefaults standardUserDefaults]valueForKey:@"userId"]; 

//convert image to nsdata object 
NSData *imageData = UIImageJPEGRepresentation(imageView.image, .9); 

NSLog(@"User id is:%@", userString); 
NSLog(@"The tag string:%@", myTagString); 
NSLog(@"the question string is:%@", myQuestionString); 
NSLog(@"the image data is:%@", imageData); 
NSArray *keys = [NSArray arrayWithObjects:@"category", @"question", @"latitude", @"longitude", @"user_id", @"image",nil]; 

NSArray *objects = [NSArray arrayWithObjects:myTagString, myQuestionString, @"0.0", @"0.0", userString, imageData, nil]; 
NSDictionary *theRequestDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

NSURL *theURL = [NSURL URLWithString:@"http://theserver.com/query"]; 
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0f]; 
[theRequest setHTTPMethod:@"POST"]; 

[theRequest setValue:@"application/json-rpc" forHTTPHeaderField:@"Content-Type"]; 
NSString *theBodyString = [[NSString alloc]init]; 
theBodyString = [[CJSONSerializer serializer] serializeDictionary:theRequestDictionary]; 
NSLog(@"body string: %@", theBodyString); 
NSData *theBodyData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding]; 
NSLog(@"body data: %@", theBodyData); 
[theRequest setHTTPBody:theBodyData]; 

NSURLResponse *theResponse = NULL; 
NSError *theError = NULL; 
NSData *theResponseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&theResponse error:&theError]; 
NSString *theResponseString = [[[NSString alloc] initWithData:theResponseData encoding:NSUTF8StringEncoding] autorelease]; 
NSLog(@"the response string:%@", theResponseString); 
NSDictionary *theResponseDictionary = [[CJSONDeserializer deserializer] deserialize:theResponseData error:nil]; 
NSLog(@"%@", theResponseDictionary); 

Ceci est mon premier post dans un forum, donc je présente mes excuses si une partie de la mise en forme est faux. N'hésitez pas à le critiquer afin que je puisse soumettre de meilleurs messages dans le futur.

Répondre

0

Jetez un oeil sur le code de ce projet dans Github http://akos.ma/7qp où la classe Wrapper définit deux en-têtes dans la requête, afin que le serveur puisse traiter les données binaires en cours de téléchargement. Regardez la méthode uploadData: toUrl: à la ligne 118, qui définit les en-têtes de type de contenu requis.