Swift 3: carga de imágenes multiparte de Alamofilre 4.0 con progreso

Lo he hecho con la carga de imágenes y su subida satisfactoria en el server utilizando el método siguiente.

Ahora quiero upload la image con su progreso para que alguien me diga cómo hacerlo. Lo encontré en todas partes pero no obtuve la solución correcta.

Código para cargar imágenes sin su progreso:

@IBAction func uploadClick(_ sender: AnyObject) { // define parameters let parameters = [ "file_name": "swift_file.jpeg" ] Alamofire.upload(multipartFormData: { (multipartFormData) in multipartFormData.append(UIImageJPEGRepresentation(self.photoImageView.image!, 0.5)!, withName: "photo_path", fileName: "swift_file.jpeg", mimeType: "image/jpeg") for (key, value) in parameters { multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key) } }, to:"http://server1/upload_img.php") { (result) in switch result { case .success(let upload, _, _): upload.responseJSON { response in //self.delegate?.showSuccessAlert() print(response.request) // original URL request print(response.response) // URL response print(response.data) // server data print(response.result) // result of response serialization // self.showSuccesAlert() //self.removeImage("frame", fileExtension: "txt") if let JSON = response.result.value { print("JSON: \(JSON)") } } case .failure(let encodingError): //self.delegate?.showFailAlert() print(encodingError) } } } 

Finalmente obtuve la solución después de search mucho. Solo necesitamos poner el bloque uploadProgress dentro del bloque de resultados.

 Alamofire.upload(multipartFormData: { (multipartFormData) in multipartFormData.append(UIImageJPEGRepresentation(self.photoImageView.image!, 0.5)!, withName: "photo_path", fileName: "swift_file.jpeg", mimeType: "image/jpeg") for (key, value) in parameters { multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key) } }, to:"http://server1/upload_img.php") { (result) in switch result { case .success(let upload, _, _): upload.uploadProgress(closure: { (Progress) in print("Upload Progress: \(Progress.fractionCompleted)") }) upload.responseJSON { response in //self.delegate?.showSuccessAlert() print(response.request) // original URL request print(response.response) // URL response print(response.data) // server data print(response.result) // result of response serialization // self.showSuccesAlert() //self.removeImage("frame", fileExtension: "txt") if let JSON = response.result.value { print("JSON: \(JSON)") } } case .failure(let encodingError): //self.delegate?.showFailAlert() print(encodingError) } }