**前言:**最近做專案上傳檔案到騰訊雲,在自己手上的真機上測試沒有出現任何問題,提交測試後,也沒出現任何問題,都可以上傳到騰訊雲。 可是從app store下載後,部分客戶投訴上傳不成功,提示以下錯誤資訊:
-180 ERROR_CMD_COS_INVALID_PATH 非法路徑
當時就蒙了,那麼多測試機怎麼都沒問題,這麼錯誤怎麼找?只能去查查騰訊雲提供的錯誤解決方案,然而只說了這麼一條:
好吧,還是自己去查程式碼:
//sign, bucket都是騰訊雲提供的
//zipPath 為 (~/document/XXX.db.zip)
//remotePath是通過時間戳來生成的
TXYFileUploadTask *fileTask = [[TXYFileUploadTask alloc] initWithPath:zipPath
sign:sign
bucket:bucket
customAttribute:nil
uploadDirectory:remotePath
msgContext:nil];
複製程式碼
獲取remotePath的時間戳的程式碼如下:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYYMMddhhmmssSSS"];
NSString *date = [formatter stringFromDate:[NSDate date]];
複製程式碼
仔細看看,唯一可能產生變化的是沙盒那個路徑,先把問題定位在沙盒路徑,與騰訊雲定義的規範有衝突?公司測試機都又測不出問題,於是就聯絡朋友,紛紛下載使用,最終還是找到一個可以出現“非法路徑”的真機,說多了都是淚。
省去測試流程,發現問題所在,就是格式化日期的坑,上面的時間戳的程式碼,執行一下:
控制檯居然顯示: 格式化後字串:2016060310:38:46.702
what happened!!! 居然沒按時間格式的字串格式化!!!出現了":",好了,這個就是問題所在,解決它的方案,設定formatter的區域:
結果就按自己定義的格式顯示了,再放入專案中,發現上傳成功,OK!原來是區域的問題,好吧,我來看看到底原來到底是什麼鬼區域,程式碼如下:
Wow,居然是“zh_CN”,那為什麼不按我們設定的格式格式化日期呢?非要強制設定區域之後才能正常格式化,百思不解!
####設定區域在格式化時間中的重要性####
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
複製程式碼
**補充:**對於這樣的小問題,強烈推薦還是用JSPatch來修復。 JSPatch分發平臺:http://jspatch.com/Apps/index JSPatch轉化平臺:http://bang590.github.io/JSPatchConvertor/