2016-05-09 82 views
1

我試圖使用API​​從我的iOS應用上傳圖像Trello:無法上傳圖片作爲通過Trello API從iOS的附件

 let imageDataToSend = UIImageJPEGRepresentation(imageToSend, 0.9) 

     let parameters: [String: AnyObject] = [ 
     "file": imageData, 
     "mimeType" : "image/jpeg", 
     "token" : "mytoken", 
     "key" : "mykey", 
     "name" : "attachment" 

    ] 

    oauthswift.client.post("https://trello.com/1/cards/\(card)/attachments", parameters: parameters, 
          success: { 
          data, response in 
          print("attach worked \(self.nsdataToJSON(data))") 


     }, failure: { (error) in 
      print("post failed\(error)") 
    }) 

附件總是通過爲文本文件。我試過64bitEncoding,UIImagePNGRepresentation。我試過設置不同的mimeTypes。

我不明白爲什麼mimeType總是返回null。下面是我回來的數據:

Optional({ 
bytes = 20681; 
date = "2016-05-09T03:33:44.151Z"; 
edgeColor = "<null>"; 
id = 57300518f5160afdb6ae5670; 
idMember = 54ef9a89772213529008b0a9; 
isUpload = 1; 
mimeType = "<null>"; 
name = attachment; 
previews =  (
); 
url = "https://trello-attachments.s3.amazonaws.com/56b8cf1bca0ff64f7f1ba86a/57300517b871603e15aeb9b5/b8b906a4c952ec3b8d889fcfa37dddfb/Upload"; 
}) 

下面是相關API:https://developers.trello.com/advanced-reference/card#post-1-cards-card-id-or-shortlink-attachments

+0

您是否嘗試過'讓base64String = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.allZeros)'這個??? –

+0

是的 - 那也行不通 –

回答

1

當提交這樣的參數,你應該%的躲避值。例如,您可以將字符集定義爲只有「未保留」字符(如RFC 3986所定義的),即字母數字字符加 - ,。,_和〜: 將擴展名添加到您的swift文件中,如下所示:

extension NSCharacterSet { 
    class func URLParameterValueCharacterSet() -> NSCharacterSet { 
     let characterSet = NSMutableCharacterSet.alphanumericCharacterSet() 
     characterSet.addCharactersInString("-._~") 

     return characterSet 
    } 
} 

然後,你可以這樣做:

func percentEscapeString(string: String) -> String { 
     return string.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLParameterValueCharacterSet())! 
    } 

現在發佈圖片是這樣的:

var imageData = UIImageJPEGRepresentation(selectedImg, 0.2) 
    let base64String = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.allZeros) 
    let imgStringToPost = percentEscapeString(base64String) 
    let parameters: [String: AnyObject] = [ 
     "file": imgStringToPost, 
     "mimeType" : "image/jpeg", 
     "token" : "mytoken", 
     "key" : "mykey", 
     "name" : "attachment" 

    ] 
+0

感謝您的想法 - 不幸的是,這繼續被解釋爲trello方面的文本。 (曾嘗試傳遞imagedata,base64string和imgstringtopost)。 –

0

我能夠這樣使用不同的力來解決布拉裏 - 阿拉莫菲爾和特雷羅似乎在一起很好。這裏的方法,如果有人跑進類似的問題:

Alamofire.upload(.POST, URL, multipartFormData: { 
     multipartFormData in 

      if let imageData = UIImageJPEGRepresentation(image, 0.5) { 
       multipartFormData.appendBodyPart(data: imageData, name: "file", fileName: "file.png", mimeType: "image/png") 
      } 

     for (key, value) in parameters { 
      multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
     } 

     }, encodingCompletion: { 
      encodingResult in 

      switch encodingResult { 
      case .Success(let upload, _, _): 
       print("it worked") 
      case .Failure(let encodingError): 
       print(encodingError) 
      } 
    })