2016-05-09 5 views
1

Я пытаюсь загрузить изображение из моего приложения IOS для Trello с помощью API:Невозможно загрузить изображение как вложение с прошивкой через Trello API

 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, UIImagePNGRпредставление. Я пробовал устанавливать разные 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), а именно буквенно-цифровые символы плюс -,., _ И ~: . Добавьте расширение в ваш быстрый файл следующим образом:

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

Спасибо за идею - к сожалению, это по-прежнему интерпретируется на стороне трелло как текст. (Попробовали передать imagedata, base64string и imgstringtopost). –

0

Я был в состоянии решить эту проблему с помощью другого Li Брари - Аламофир и Трелло, похоже, играют хорошо вместе. Вот метод, если кто-то работает на аналогичные вопросы:

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) 
      } 
    }) 

 Смежные вопросы

  • Нет связанных вопросов^_^