2016-11-30 5 views
-2

をエンコード...アンドロイドは、iOSのスクリーンショットを取るためのアップロードuiimage base64では、私はUIViewの(チャート)をアップロードしようとしていますが、私は(Webサービスからの)電子メールでヌル画像を受信

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

あなたのコードを働いていますデバイスは正常です。これとは別に

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を使用することをお勧めします:私は、サーバーにUIImageをアップロードするためのあなたのポストの要求は、以下のものを欠いていたと思います。それはより簡単になります。このようにすることができます

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

関連する問題