2016-11-30 2 views
-2

Я пытаюсь загрузить UIView (график), но я получать нулевую картину по электронной почте (от веб-сервиса) ... Android работаетЗагрузить UIImage base64 закодирован

UIGraphicsBeginImageContext(self.view.bounds.size); 
    self.view.layer.render(in: UIGraphicsGetCurrentContext()!) 
    let screenShot = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    let jpegCompressionQuality: CGFloat = 1 
    let imgData:Data = UIImageJPEGRepresentation(screenShot!,jpegCompressionQuality)! 
    let lengthOfData = imgData.count 
    let strBase64 = imgData.base64EncodedString(options: []) 
    var request = URLRequest(url: URL(string: "http://myws.com/Chart.php")!) 
     request.httpMethod = "POST" 
    let postString = "data=\(strBase64)&[email protected]" 
    request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
    request.addValue("\(lengthOfData)", forHTTPHeaderField: "Content-Length") 
    request.httpBody = postString.data(using: String.Encoding.utf8) 
    let task = URLSession.shared.dataTask(with: request) { data, response, error in 
     guard let data = data, error == nil else { 
      print("error=\(error)") 
      return 
     } 
     if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { 
      print("statusCode \(httpStatus.statusCode)") 
      print("response = \(response)") 
     } 
     let responseString = String(data: data, encoding: .utf8) 
     print("responseString = \(responseString)") 
    } 
    task.resume() 
+0

Я думаю, что вам не хватает нескольких вещей здесь, как значение настройки для httpheaderfield и т. Д. – KrishnaCA

ответ

0

Ваш код для принятия снимок экрана прошивкой устройство в порядке. Я думаю, что ваш запрос пост для загрузки UIImage на сервере не хватает следующих вещей:

let imgData:NSData = data   
let lengthOfData = imgData.length 
// ENCODINGDATA - whatever encoding your server wants here 
request.addValue(ENCODINGDATA, forHTTPHeaderField: "Content-Type") 
request.addValue("\(lengthOfData)", forHTTPHeaderField: "Content-Length") 

Помимо этого, лучше использовать AlamoFire для обработки сложных задач сервера, как это. Это облегчает процесс. Это можно сделать так:

let imageData = UIPNGRepresentation(image)! 

Alamofire.upload(imageData, to: "https://httpbin.org/post").responseJSON { response in 

    debugPrint(response) 
} 

Не стесняйтесь предлагать изменения, чтобы сделать это лучше. Пожалуйста, дайте мне знать, если в моем ответе есть какие-либо ошибки или недостатки.

+0

не работает, я изменил код с вашим предложением – user1801745

+0

- это изображение, которое вы получение на сервере еще пустое? – KrishnaCA

+0

yes, используя 'UIImageWriteToSavedPhotosAlbum (screenShot !, nil, nil, nil)' изображение правильно перемещается в память телефона – user1801745