Swift 3.1 如何将图片作为 base64 插入到 HTTPS 请求的主体中

Swift 3.1 How to insert image as base64 into body of HTTPS request

我想使用 HTTPS POST 请求将图像发送到服务器。我需要将图像作为 base64 数据发送。我已经将图像数据转换为base64编码的字符串,但我无法将其转换为数据以将其放入httpBody。

    //encode image to base64
    let chosenImage = imageView.image
    let imageData:NSData = UIImagePNGRepresentation(chosenImage!)! as NSData
    let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters)
    let dataBase64: Data = Data(strBase64)


    let uploadUrlString = "https://api.imgur.com/3/upload"
    let uploadUrl = NSURL(string: uploadUrlString)
    let uploadRequest = NSMutableURLRequest(url: uploadUrl! as URL)
    uploadRequest.addValue("Client-ID f7e5521d5dd4245", forHTTPHeaderField: "Authorization")
    uploadRequest.httpMethod = "POST"
    uploadRequest.httpBody = imageData
    let uploadSession = URLSession.shared
    let postRequest = uploadSession.dataTask(with: uploadRequest as URLRequest) { (data, response, error) -> Void in
        if let antwort = response as? HTTPURLResponse {
            let code = antwort.statusCode
            print(code)
        }
    }
    postRequest.resume()

在 StakOverflow 上看到了一些解决方案,但不知道如何正确执行。 请指教

最后,我根据 Leo Dabus 的一些建议对代码进行了一些更改。而且我确保它在没有任何转换为​​ base64:

的情况下工作正常
    let chosenImage = imageView.image
    let imageData = UIImageJPEGRepresentation(chosenImage!, 1)
    let uploadUrlString = "https://api.imgur.com/3/upload"
    let uploadUrl = URL(string: uploadUrlString)

    var postRequest = URLRequest.init(url: uploadUrl!)
    postRequest.addValue("Client-ID XXXXXX", forHTTPHeaderField: "Authorization")
    postRequest.httpMethod = "POST"
    postRequest.httpBody = imageData

    let uploadSession = URLSession.shared
    let executePostRequest = uploadSession.dataTask(with: postRequest as URLRequest) { (data, response, error) -> Void in
        if let response = response as? HTTPURLResponse
        {
            print(response.statusCode)
        }
        if let data = data
        {
            let json = String(data: data, encoding: String.Encoding.utf8)
            print("Response data: \(String(describing: json))")
        }
    }
    executePostRequest.resume()

所以当上传图片时,我在 json 中得到了结果的主体,它向我显示了上传图片的 link:

"link\":\"http:\/\/i.imgur.com\/ePOUIyN.jpg\"},\"success\":true,\"status\":200}")

我遇到了同样的问题...这是我将 BASE64 字符串插入电子邮件正文的解决方案: //SWIFT 3.x

//convert to Data


 let image = UIImage(data: yourUIImage!  as Data)


//convert to base64 String 
 let imageData: NSData = UIImagePNGRepresentation(image!)! as NSData


 let imageStr = imageData.base64EncodedString(options:.endLineWithCarriageReturn)


   // insert this into your HTML code 
 let tmpHTMLimage  = "<img class=\"no-show\" src=\"data:image/png;base64," + imageStr + "\" alt=\"Image\"  height=\"80\" width=\"80\"/>"
  • 解决方法:使用 .endLineWithCarriageReturn 而不是 .lineLength64Characters!!!

    我真的希望这对你们中的一些人有所帮助!