使用PHP在ios上通过JSON在web服务器上上传图片

我有一个在web服务器上传用户数据的应用程序。

我正在使用下面的代码将数据传递给Web服务器与下面的代码。

-(IBAction)btnRegister:(id)sender { jsonSP = [SBJSON new]; jsonSP.humanReadable = YES; NSString *service = @"/register.php"; NSData *imageData = UIImagePNGRepresentation([UIImage imageNamed:@"register_btn.png"]); [Base64 initialize]; NSString *imageString = [Base64 encode:imageData]; NSLog(@"%@",imageString); NSString *requestString = [NSString stringWithFormat:@"{\"?username\"=\"%@\"&\"user_password\"=\"%@\"&\"first_name\"=\"%@\"&\"email\"=\"%@\"&\"profile_photo_link\"=\"%@\"\"}",@"Test",@"Test",@"Test",@"Test@mmm.com",imageString]; NSData *requestData = [NSData dataWithBytes: [requestString UTF8String] length: [requestString length]]; NSString *fileLoc = [[NSBundle mainBundle] pathForResource:@"URLName" ofType:@"plist"]; NSDictionary *fileContents = [[NSDictionary alloc] initWithContentsOfFile:fileLoc]; NSString *urlLoc = [fileContents objectForKey:@"URL"]; urlLoc = [urlLoc stringByAppendingString:service]; NSLog(@"URL : %@",urlLoc); // urlLoc = [urlLoc stringByAppendingString:@"?username=abcd&password=abcd"]; urlLoc = [urlLoc stringByAppendingString:requestString]; urlLoc = [urlLoc stringByReplacingOccurrencesOfString:@"{" withString:@""]; urlLoc = [urlLoc stringByReplacingOccurrencesOfString:@"}" withString:@""]; urlLoc = [urlLoc stringByReplacingOccurrencesOfString:@"\"" withString:@""]; NSLog(@"URL : %@",urlLoc); // [fileContents release]; //o_r NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: urlLoc]]; NSString *postLength = [NSString stringWithFormat:@"%d", [requestData length]]; [request setHTTPMethod: @"POST"]; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setHTTPBody: requestData]; // self.connection = [NSURLConnection connectionWithRequest:request delegate:self]; NSError *respError = nil; NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: &respError ]; NSLog(@"response is %@",returnData); // [request release]; if (respError) { //[customSpinner hide:YES]; UIAlertView *alt=[[UIAlertView alloc]initWithTitle:@"Internet connection is not Available!" message:@"Check your network connectivity" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; [alt show]; //[alt release]; } else { NSString *responseString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding]; NSLog(@"response string %@",responseString); } } 

我成功地能够发送数据到networking服务器没有图像。

但是,如果通过编码Base64上传带有上述代码的图像,则数据不会上传到networking服务器上。 它给我一个错误在NSLog说请求查询string太长。

我已经导入Base64.h和.m文件。

我也想用图像传递数据。

我怎样才能做到这一点?

我知道有很多链接,但我想通过这种方式,所以请告诉我我在这里做什么错了?

请帮帮我。

提前致谢。

嘿Manthan尝试这个波纹pipe代码转换UIImage NSString ,然后将其传递到服务器

  UIImage *imgPic =[UIImage imageNamed:@"register_btn.png"]; NSData * imageData = UIImagePNGRepresentation(imgPic); NSString *base64String = [imageData base64EncodedStringWithOptions:0]; 

它的服务器问题,并告诉你这个错误。

json没有最大长度,但是可以发送的数据量最大。 为了解决这个问题,只需设置你可以在.htaccess文件中发送的数据量: php_value post_max_size 20M

编辑

另外,如果您有权访问php.ini,则可以在post_max_size行中对其进行更改

像这样尝试;

 - (void)addNewItem:(SH_NewItem *)newItem withCompletitionBlock:(void(^)(NSArray *items, NSError *error, NSDictionary *userInfo))completitionBlock { AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:[[SH_Shared sharedInstance] getBaseURL]]]; //main cover image... NSData *imageData = UIImageJPEGRepresentation(newItem.image, JPEG_IMAGE_QUALITY); NSData *imageData1 = UIImageJPEGRepresentation(newItem.image1, JPEG_IMAGE_QUALITY); NSData *imageData2 = UIImageJPEGRepresentation(newItem.image2, JPEG_IMAGE_QUALITY); NSData *imageData3 = UIImageJPEGRepresentation(newItem.image3, JPEG_IMAGE_QUALITY); NSData *imageData4 = UIImageJPEGRepresentation(newItem.image4, JPEG_IMAGE_QUALITY); NSDictionary *params = [[NSDictionary alloc]init]; params = [NSDictionary dictionaryWithObjectsAndKeys: newItem.title, @"title", newItem.itemDescription, @"description", [[SH_Shared sharedInstance] token], @"token", nil]; NSLog(@"params-%@",params); NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"new_item" parameters:params constructingBodyWithBlock: ^(id <AFMultipartFormData> formData) { if (imageData != nil) [formData appendPartWithFileData:imageData name:@"images[0]" fileName:@"image_ad.png" mimeType:@"multipart/form-data"]; if (imageData1 != nil) [formData appendPartWithFileData:imageData1 name:@"images[1]" fileName:@"image_ad1.png" mimeType:@"multipart/form-data"]; if (imageData2 != nil) [formData appendPartWithFileData:imageData2 name:@"images[2]" fileName:@"image_ad2.png" mimeType:@"multipart/form-data"]; if (imageData3 != nil) [formData appendPartWithFileData:imageData3 name:@"images[3]" fileName:@"image_ad3.png" mimeType:@"multipart/form-data"]; if (imageData4 != nil) [formData appendPartWithFileData:imageData4 name:@"images[4]" fileName:@"image_ad4.png" mimeType:@"multipart/form-data"]; }]; AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [self getDataWithOperation:op completitionBlock:^(NSData *data, NSError *error, NSDictionary *userInfo) { CJSONDeserializer *deserializer = [CJSONDeserializer deserializer]; NSError *deserializeError = nil; NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"Response: %@", str); NSDictionary *requestResponseDict = [deserializer deserialize:data error:&deserializeError]; NSString *status = [requestResponseDict valueForKey:kStatus]; BOOL isSuccess = [[status valueForKey:kSuccess] boolValue]; if (isSuccess) { // it's OK } else { // its error } }]; } 

我使用多部分表单数据处理了以下代码。

 responseData = [NSMutableData data]; NSString *service = @"http:///registerUser.php"; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:service]]; [request setHTTPMethod:@"POST"]; 

//创build边界…

 NSString *boundary = @"---------------------------14737809831466499882746641449"; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

//创buildpost的主体

 NSMutableData *body = [NSMutableData data]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[@"Content-Disposition: form-data; name=\"profile_photo_link\"; filename=\"ipodfile.png\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; UIImageView *imgvUserImage = [[UIImageView alloc]init]; imgvUserImage.image= [UIImage imageNamed:@"register_btn.png"]; NSData * imageData=[NSData dataWithData:UIImagePNGRepresentation(imgvUserImage.image)]; [body appendData:[NSData dataWithData:imageData]]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"username\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"%@",txtUserName.text] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

//将post正文设置为reqeust

  [request setHTTPBody:body]; postconnection=[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

**对于回应

 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { [responseData setLength:0]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [responseData appendData:data]; } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { [self removeProgressIndicator]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { if (connection == postconnection) { NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; NSLog(@"%@",responseString); // NSDictionary *deserializedData = [responseString objectFromJSONString]; // NSString *string = [deserializedData objectForKey:@"Status"]; } }