what swiftyjson source responsedata manager example swift2 multipartform-data alamofire

swift2 - source - swiftyjson alamofire



Alamofire: cómo tener un cierre de progreso y finalización con la carga de varias partes (2)

Aquí hay una manera de completar, cerrar la falla y el progreso (gracias a mi colega para señalarme la solución):

Alamofire.upload(.POST, absPath(), headers: headers(), multipartFormData: { (multipartFormData:MultipartFormData) -> Void in multipartFormData.appendBodyPart(data: json, name: "metadata", mimeType: "application/json") multipartFormData.appendBodyPart(data: self.data, name: "document", fileName: "photo.png", mimeType: "image/png") }, encodingMemoryThreshold: 10 * 1024 * 1024, encodingCompletion: { (encodingResult) -> Void in switch encodingResult { case .Success(let upload, _, _): upload.responseJSON { response in // success block } upload.progress { _, totalBytesRead, totalBytesExpectedToRead in let progress = Float(totalBytesRead)/Float(totalBytesExpectedToRead) // progress block } case .Failure(_): // failure block } })

Pude cargar el archivo con la carga Alamofire multi-form-form-data:

Alamofire.upload(.POST, "api.myservice.com", headers: myheaders, multipartFormData: { (multipartFormData:MultipartFormData) -> Void in multipartFormData.appendBodyPart(data: json, name: "metadata", mimeType: "application/json") multipartFormData.appendBodyPart(data: self.data, name: "document", fileName: "photo.png", mimeType: "image/png") }, encodingMemoryThreshold: 10 * 1024 * 1024) { (result:Manager.MultipartFormDataEncodingResult) -> Void in }

pero no veo una manera de seguir el progreso de la carga y hacer que se llame al bloque de finalización una vez que se completa la carga (o falla). ¿Hay alguna manera de hacer esto en Alamofire?

Nota: Soy consciente de que es posible cargar contenido con progreso, pero estoy buscando datos multipart-form-specific.


La respuesta aceptada es genial. Este incluye parámetros, también:

let image = UIImage(named: "big.jpg")! let imageData = UIImageJPEGRepresentation(image, 1) let coupon = textBox?.text ?? "NO coupon" let uploadUrl = "http://example.com/upload.php" // define parameters let parameters : [String: String] = ["one":"some param", "two":"some other param"] Alamofire.upload(.POST, uploadUrl, headers: nil, multipartFormData: { multipartFormData in multipartFormData.appendBodyPart(data: imageData!, name: "cannotBeBlank", fileName: "image.zip", mimeType: "image/png") // import parameters for (key, value) in parameters { multipartFormData.appendBodyPart(data: value.data!, name: key) } }, encodingCompletion: { encodingResult in switch encodingResult { case .Success(let upload, _, _): upload.progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in print("1) /(bytesWritten) 2) /(totalBytesWritten) 3) /(totalBytesExpectedToWrite)") // This closure is NOT called on the main queue for performance // reasons. To update your ui, dispatch to the main queue. dispatch_async(dispatch_get_main_queue()) { print("Total bytes written on main queue: /(totalBytesWritten)") } } upload.responseData(self.handleResponse) case .Failure: self.handleError() } })