起因
在向服务器上传图片时,把图片的数据用base64编码,之后把图片的字符串上传到服务器来实现上传图片的功能,代码如下
NSData *data = [NSData dataWithContentsOfFile:@"/Users/damon/Desktop/1B310979A504CF856D6D80B4708863E3.jpg"]; NSString *str =[data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; NSData *data2 = [NSData dataWithContentsOfFile:@"/Users/damon/Desktop/demo.png"]; NSString *str2 =[data2 base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; NSURL *url = [NSURL URLWithString:@"http://adapp.jidonggame.com/upload.html"]; NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:@"POST"]; NSArray *array =[NSArray arrayWithObjects:str,str2, nil]; NSData *jsonData=[self toJSONData:array]; NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; NSString *poststr =[NSString stringWithFormat:@"pic=%@",jsonString]; [request setHTTPBody:[poststr dataUsingEncoding:NSUTF8StringEncoding]]; [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSLog(@"error:%@",error); }] resume]; //转换为json数据 - (NSData *)toJSONData:(id)theData{ NSError *error = nil; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:theData options:NSJSONWritingPrettyPrinted error:&error]; if ([jsonData length] > 0 && error == nil){ return jsonData; }else{ return nil; } }
在服务端看,上传的有数据,但是图片都加载不出来,都是坏图。
最后打印出来前端的str字符串和服务端得到的字符串对比,惊奇的发现服务端得到的字符串中所有的+号全部变成了空格,也就是说在url传输base64编码过的数据的时候,居然自动把加号变成了空格。
解决方案
因为前端传输的数据是正确的,所以解决方案就是服务端把得到的字符串中的空格转换为加号即可。
参考文章
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/376.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!