ios - 无法通过 Trello API 从 iOS 上传图像作为附件

标签 ios image mime-types nsdata trello

我正在尝试使用 API 将图像从我的 iOS 应用上传到 Trello:

      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

最佳答案

当像这样提交参数时,您应该对值进行百分号转义。例如,您可以将字符集定义为仅包含“未保留”字符(由 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"

    ]

关于ios - 无法通过 Trello API 从 iOS 上传图像作为附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37107427/

相关文章:

ruby - 获取 Ruby 中的所有视频 mime 类型

ios - 创建一个 SKShapeNodes 数组

jquery - elevateZoom 禁用隐藏元素

python - 如何从图像创建视频?

image - 如何从图像中裁剪出检测到的对象(圆形)并存储它?

Android - 检测 URL mime 类型?

go - MIME 类型 (“text/plain” )不匹配(X-Content-Type-Options : nosniff)

ios - 使用 token 创建的 Twitter 帐户在 iOS7 上失败

iphone - FMDB lastinsertRowID 始终为 0

ios - 父 ViewController 如何知道其子 ViewController 何时被弹出?