iOS - 日常小坑,圖片和NSString相互轉換

這幾天在做一款多任務斷點上傳下載的功能 , 由於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};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章