今天做图片上传,后台用的是base64解密图片二进制文件,以前都是用表单上传来解决图片上传的,现在后台没有人改,所以研究下base64上传。
需要将图片base64加密,但是调用
[data base64Encoding];
后得到的字符串上传到后台图片有问题,就是一张灰色图片。然后谷歌了下,发现这种方法得到的字符串里面含有一些特殊字符如“=,”什么的在post到后台后就会变成空格,所以图片会有问题。找到一个方法需要将这些特殊的字符进行UTF8编码:
NSString* newImgStr = (__bridge NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)theImgStr,
NULL,
CFSTR(":/?#[]@!$&’()*+,;="),
kCFStringEncodingUTF8);
这样保存在内存中,发送的时候再转换为nsdata,同样要使用utf-8编码:
NSData *jsonData = [[self getDictStringFromDict:param] dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:jsonData];
但是改掉后发现post url到后台后台会报错,
Exception occurred during processing request: null
感觉可能是图片文件太大导致,所以将
UIImagePNGRepresentation改为
UIImageJPEGRepresentation并设置压缩比例为0.2。OK!,没有错误了,图片上传成功。
一波三折啊。呵呵