2016-11-30 91 views
-2

我想上传的UIView(图),但我在邮件接收空图片(来自Web服务)... 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

你的代码采取的iOS的屏幕截图设备很好。我想上传的UIImage到服务器的POST请求缺乏以下的事情:

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

是的,使用'UIImageWriteToSavedPhotosAlbum(screenShot!,nil,nil,nil)'图像正确地存储到手机存储器 – user1801745