Obtenga datos de image con la request de Alamofire

He actualizado mi código a Swift 3 y estoy teniendo problemas con la migration a Alamofire 4.0. He utilizado la guía de migration de Alamofire para realizar con éxito la mayoría de las modificaciones necesarias, pero aún tengo problemas para get datos de image.

El viejo código Swift 2 / Alamofire 3 (funcionaba según lo previsto):

func beginGetImageRequest() { if let imagePath = thumbPath { request = Alamofire.request(.GET, imagePath).response(completionHandler: { (_, _, imageData, error) -> Void in if error != nil { NSLog("Error downloading thumbnail image: \(error)") } else { if let downloadedImage = UIImage(data: imageData!) { self.imageView.image = downloadedImage } } }) } } 

Mi bash de actualización a Alamofire 4:

 func beginGetImageRequest() { if let imagePath = thumbPath { request = Alamofire.request(imagePath, method: .get, parameters: [:], encoding: JSONEncoding.default) .validate { request, response, imageData in if let downloadedImage = UIImage(data: imageData!) { self.imageView.image = downloadedImage } else { print(response) print(imageData) } return .success } } } 

Salidas de print(imageData) Optional(306 bytes) . La image debería ser de unos 40 kb, lo que me indica que el problema es cómo estoy implementando la request, no con la forma en que estoy convirtiendo los datos a un UIImage.

Aquí está el resultado para print(response)

 <NSHTTPURLResponse: 0x618000221660> { URL: http://209.126.98.238/cache/igames_thumbhttp://sofes.miximages.comgames/53848027743af.jpeg } { status code: 400, headers { Connection = close; "Content-Encoding" = gzip; "Content-Length" = 245; 2016-10-04 21:54:53.653480 EyeGames[74216:3416747] [] nw_connection_send_stats_report 21 Generated report: Delegated: 0 Report reason: app data stall TCP statistics report: Time to DNS start: 0 ms Time to DNS resolved: 0 ms DNS resolved time: 0 ms DNS answers cached: 0 Interface type: 1 Time to TCP start: 3 ms Time to TCP establishment: 223 ms Connection establishment: 220 ms Flow duration: 11447 ms Connected interface type: 1 Connected: 1 Traffic class: 0 Cellular fallback: 0 Cellular RRC connected: 0 Kernel reported stalls: 0 Kernel reported connection stalls: 0 Kernel reported read stalls: 0 Kernel reported write stalls: "Content-Type" = "text/html; charset=iso-8859-1"; Date = "Tue, 04 Oct 2016 18:54:43 GMT"; Server = "Apache/2.2.22 (Debian)"; Vary = "Accept-Encoding"; } } 

La gente en Alamofire hizo una biblioteca de componentes de imágenes, AlamofireImage . Maneja todas estas cosas para que tu vida sea más fácil. Agréguelo a su proyecto y luego puede hacer esto:

 import Alamofire import AlamofireImage Alamofire.request(imageUrl, method: .get).responseImage { response in guard let image = response.result.value else { // Handle error return } // Do stuff with your image } 

Si realmente quieres usar Alamofire para download una image, debes probar la encoding URLE en lugar de la encoding JSONE, tal como lo sugirió Padrino en los comentarios anteriores. Aunque recomendaría usar Kingfisher en su lugar. Le tomará una sola línea de código en lugar de un método de request GET con Alamofire:

 self.imageView.kf.setImage(with: URL(string: imagePath))