Язык: Swift
TargetOS: MacOS
Мне нужно закодировать изображение в виде строки base64 и загрузить его в формате PNG с помощью IMGURAPI, используя запрос HTTP пост.У меня есть другая функция, которая делает снимок экрана и создает его как объект CGImage.Я использовал предоставленный пример base64string из их API R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
, который приводит к успешному коду 200 статуса.К сожалению, замена этой строки моей функцией imageToBase64String () (ниже) приводит к ошибке 415 кода состояния.Я могу отобразить строку изображения Base64 в HTML без каких-либо проблем.
Функция для преобразования снимка экрана CGImage в Base64String:
func imageToBase64String(_ cgImage: CGImage) -> String? {
let imageRep = NSBitmapImageRep(cgImage: cgImage).representation(using: NSBitmapImageRep.FileType.png, properties: [:])
let base64Image:String = ((imageRep!.base64EncodedString()))
Logger.write(base64Image)
return base64Image
}
Вот анонимная загрузка для imgur:
func anonymousUpload(_ image: CGImage){
let base64Image = imageToBase64String(image)!
// Using this works fine
//let base64Image = "R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
let url = "https://api.imgur.com/3/upload"
let request = NSMutableURLRequest(url: NSURL(string: url)! as URL)
request.httpMethod = "POST"
request.setValue("Client-ID \(imgurAPI.CLIENT_ID)", forHTTPHeaderField: "Authorization")
let bodyString = "image=\(base64Image)&type=base64&title=sample&description=Desktop screenshot"
request.httpBody = bodyString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request as URLRequest){ data, response, error in
if (error != nil){
print("error: \(error)")
return
}
print("response: \(response!)")
let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
print("response string: \(responseString!)")
}
task.resume()
}