IOS上传图片base64编码的字符串加号变空格

起因

在向服务器上传图片时,把图片的数据用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编码过的数据的时候,居然自动把加号变成了空格。

解决方案

因为前端传输的数据是正确的,所以解决方案就是服务端把得到的字符串中的空格转换为加号即可。

参考文章

Last modification:January 1st, 1970 at 08:00 am
如果看了这个文章可以让你少加会班,可以请我喝杯可乐
已打赏名单
微信公众号

Leave a Comment