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!!!
我真的希望这对你们中的一些人有所帮助!
我想使用 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!!!
我真的希望这对你们中的一些人有所帮助!