這幾天在做一款多任務斷點上傳下載的功能 , 由於PC端先搭起來 , 所以很多接口或者銜接方式和移動端是沒有任何溝通的 .
簡單來說 , 我們的上傳下載是分段的 , 上傳時需要將內容轉換成流 , 然後自行切割 , 再轉換成16進制字符串 ,再加密進行傳輸, 後臺存儲和加密也都是分段 , 下載亦是如此 . 在上傳前 , 需要拿需要上傳的內容請求服務器進行驗證 , 期間遇到一個小坑 , 當我把圖片轉換成data後 , 再將data轉換成16進制進行加密後發現得到的字符串爲nil . 打斷點得出 , 是在data轉換字符串那一步 , 沒有成功 .源碼如下 :
//轉換格式,md5加密
NSData *data = UIImagePNGRepresentation(image);
NSString *imageDataStr = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSString *newImageStr = [imageStr md5String];
後面查了一些資料 , 才得出 , 當data過大 , 或者包含一些非法字符不符合UTF-8 要求時 , 就會得到 nil .
解決辦法 :
和後臺協商 , 使用Base64編碼進行轉換 , Base64會自動過濾一些非法字符串 , 空格之類的
//圖片轉字符串
NSData *data = UIImagePNGRepresentation(image);
//base加密轉換字符串
NSString *imageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength] ;
//md5加密
NSString *newImageStr = [imageStr md5String];
//字符串轉圖片
NSData *imageData = [imageStr dataUsingEncoding:NSUTF8StringEncoding];
UIImage *image = [UIImage imageWithData:imageData];
另附一個白癡小坑.. 感覺自己已經快蠢哭 . 後臺要求傳一個字典 , 字典裏包含一個數組 , 數組裏包含一個字典的參數 .. 傳了半天怎麼都不成功 .. 找到後臺 , 查看我傳的參數 , 由於內容包含了數組 , 所以導致信息錯誤 ..然後就想吧 , 把數組轉換成JSon , 轉了半天居然不會了!!!居然還去翻了jsonKit … 由於基本沒用過這個 …附上轉換 …
NSArray *array = @[dict];
NSData *data = [NSJSONSerialization dataWithJSONObject:array options:NSJSONWritingPrettyPrinted error:NULL];
NSJSONSerialization *json = [NSJSONSerialization JSONObjectWithData:data222 options:0 error:NULL];
NSDictionary *requestDict = @{@"fileInits":json};