起因
在向服务器上传图片时,把图片的数据用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://blog.dongge.org/376.html
本文采用知识共享署名4.0 国际许可协议进行许可。转载或大段使用必须添加本文链接,否则您将构成侵权!
微信公众号: 东哥org
