2016-12-09 60 views
0

我想使用Swift 2.3將UIImage轉換爲Base64編碼字符串,但編碼後的字符串無法在服務器上發佈。swift 2.3將UIImage轉換爲Base64

服務器拋出錯誤,如「處理異常時拋出異常(ErrorException:iconv():檢測到輸入字符串中的非法字符)」。

我可以從編碼字符串中刪除特殊字符,或者使用我的源代碼刪除某些問題。我已經提到了我的源代碼。

//*************** Image Picker function ********* // 
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) 
{ 
    let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage 

    self.imageData = UIImageJPEGRepresentation(chosenImage, 0)   
    self.imageString = self.imageData!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions()) 
    self.webServiceForShareData() 
    dismissViewControllerAnimated(true, completion: nil) 
}//******** Image Picker End **** // 



func webServiceForShareData() 
{ 
let allowedCharacters = NSCharacterSet.URLQueryAllowedCharacterSet().mutableCopy() as! NSMutableCharacterSet 
    allowedCharacters.removeCharactersInString("+/=") 


    //****************** Alamofire Request *********** // 
    Alamofire.request(.POST,"URL",parameters:["pic":self.imageString != nil ? (self.imageString!.stringByAddingPercentEncodingWithAllowedCharacters(allowedCharacters))! :"", "txt" : self.txtTest.text!, "on_twitter" : self.twitterSuccess, "on_facebook" : self.facebookSuccess],headers : ["Authorization":(NSUserDefaults.standardUserDefaults().objectForKey("oneSocialToken") as! String)]) 
     .responseJSON 
     { 
      response in 
      print(response.request) // original URL request 
      print(response.response) // URL response 
      print(response.data)  // server data 
      print(response.result) // result of response serializatio 
      if let JSON: NSDictionary = response.result.value as? NSDictionary 
      { 
       print(JSON) 
      } 
     } 
//*************** Alamofire Request End *************** // 

}// *** Function End 

回答

0

docs

選項
,用於指定的Base-64編碼該數據的選項的掩模。可能的值在NSDataBase64EncodingOptions中給出。

所以你需要更換NSDataBase64EncodingOptions()NSDataBase64EncodingOptions().[one_of_the_following_values]

NSDataBase64Encoding64CharacterLineLength
設置行的最大長度爲64個字符,在這之後的行結束被插入。

NSDataBase64Encoding76CharacterLineLength
設置最大行長度76個字符,在這之後,行結束被插入。

NSDataBase64EncodingEndLineWithCarriageReturn
當的最大行長度被設定,指定該行結束插入應包括一個回車。

NSDataBase64EncodingEndLineWithLineFeed
當的最大行長度被設定,指定該行結束插入應該包括換行。

來源:Apple docs