繁体   English   中英

图像未在json上通过base64字符串发布

[英]Image not posting by base64 string on json

我在服务器上发布图像由json Post Webservice.I必须在base 64上传图像。我正在将我的图像编码为基本64字符串但图像不是在服务器上发布而不是其他东西。这没有问题webservice。图像在android上成功上传。

selectedImage=[[NSData alloc]initWithData:UIImageJPEGRepresentation(image, 1.0)];
[[NSUserDefaults standardUserDefaults]setObject:selectedImage forKey:@"image"];
[[NSUserDefaults standardUserDefaults]synchronize];
strImage=[[NSString alloc]init]; 
strImage = [selectedImage base64Encoding];
strImage=[strImage stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSLog(@"strImage %@",strImage);
/*
NSData  *b64DecData = [Base64 decode:strImage];
NSLog(@"strImage %@",strImage);
[bttnimage setBackgroundImage:[UIImage imageWithData:b64DecData] forState:UIControlStateNormal];
*/


NSString *post=[[NSString alloc]initWithFormat:@"name=%@&aboutMe=%@&chatId=%@&gender=%@&lookingFor=%@&city=%@&birthdate=%@&anniversarydate=%@&number1=%@&number2=%@&number3=%@&image=%@",[txtProfileName.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[txtComment.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[appDelegate.chatid stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[bttnGender.titleLabel.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[bttnLookingfor.titleLabel.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[txtPlace.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[dobLabel.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[anniversaeyLabel.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[txtNumber.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[txtNum1.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[txtNum2.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],strImage];

NSLog(@"post %@",post);
NSData * postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];

NSString * postLength = [NSString stringWithFormat:@"%d",[postData length]];

NSMutableURLRequest *latrequest = [[NSMutableURLRequest alloc] init];

NSString *url=[NSString stringWithFormat:@"http://www.xyzAbc.org/iphone/updateProfile.php?%@",post];

NSLog(@"url %@",url);

[latrequest setURL:[NSURL URLWithString:url]];
Connection=[NSURLConnection connectionWithRequest:latrequest delegate:self];   
[latrequest setHTTPMethod:@"POST"];
[latrequest setValue:postLength forHTTPHeaderField:@"Content-Length"];
[latrequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[latrequest setHTTPBody:postData];
[latrequest release];

NSLog(@"latre %@",latrequest);

代码在上面请告诉我,如果我遗失了什么。 请任何人帮助我。

首先将Base64.hBase64.m文件添加到项目中。 以下方法将从UIImage返回Base-64字符串。

-(NSString*)getBase64StringfromImage:(UIImage*)image{

    NSData *imageData = UIImageJPEGRepresentation(image,90);
    NSString *ImgStr=[Base64 encode:imageData];
    ImgStr=[ImgStr stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];
    return ImgStr;
}

当我们将它与Android进行比较时,iOS中的图片发布会有所不同。

在iOS中做这个合成

 NSString *urlString = [NSString stringWithFormat:@"********************/web-services/register_user.php?firstname=%@&lastname=%@&email=%@&password=%@&location=india&device=IPHONE",details.fname,details.lname,details.emailAddress,details.password];
    // urlString=[urlString stringByReplacingOccurrencesOfString:@" " withString:@"%20"];



UIImage *image=details.pic;
NSData *imageData =UIImageJPEGRepresentation(image, 0.1);
double my_time = [[NSDate date] timeIntervalSince1970];
NSString *imageName = [NSString stringWithFormat:@"%d",(int)(my_time)];
NSString *string = [NSString stringWithFormat:@"%@%@%@", @"Content-Disposition: form-data; name=\"profile_pic\"; filename=\"", imageName, @".jpg\"\r\n\""];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:string] dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString*s11=   [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSDictionary *responseDictionary1;
responseDictionary1 = [XMLReader dictionaryForXMLString:s11 error:nil];

////////这将解决问题

关心Charan Giri

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM