swiftyjson que example alamofireobjectmapper ios swift networking alamofire swift3

ios - que - Carga mĂșltiple de Swift 3 Alamofire



que es alamofire (4)

Gracias a la migración a Swift 3, me resulta difícil compilar mi proyecto que usa Alamofire.

El problema ocurre al cargar multipartFormData:

Alamofire.upload(.POST, URL, headers: headers, multipartFormData: { multipartFormData in . . . })

Referencia ambigua a la carga del miembro (_: to: method: headers :) ''

Cualquier ayuda muy apreciada, gracias de antemano!

RESUELTO:

Alamofire.upload(multipartFormData: { (multipartFormData) in multipartFormData.append(fileData, withName: "file_pack", fileName: "file_pack", mimeType: "text/plain") for (key, value) in self.parameters { multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key) } }, with: URL2, encodingCompletion: { (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) } })

Así es como debería implementarse el método de carga en Swift 3


En swift 3, tratando de establecer multipartFormData como @DCDC señaló en su solución. XCode intenta lanzar a AnyObject antes de .data (), así que en lugar de

value.data(using: String.Encoding.utf8)!, withName: key

yo si

[replace_your_var_name_here].data(using: String.Encoding.utf8)!, withName: key

En mi caso, mi lista var no era grande, por lo que la codificación era una opción.


Para Swift 3 y Alamofire ~ 4.3.0

Si alguien como yo intentó obtener el objeto de solicitud de forma sincrónica (sin usar bloqueos o grupos de despacho), puede utilizar este enfoque:

// outer function ... let string = "string to send" let multipartFormData = MultipartFormData() multipartFormData.append(string.data(using: .utf8)!, withName: "str") guard let data = try? multipartFormData.encode() else { // fail appropriately } let request = sessionManager.upload(data, to: url, method: .post, /* this is VERY IMPORTANT LINE */ headers: ["Content-Type" : multipartFormData.contentType]) request.validate() // do whatever you need with request

Tenga en cuenta que debe configurar el encabezado Content-Type desde multipartFormData ya que contiene límites.

Si no necesita tener su objeto de solicitud sincrónicamente, la otra respuesta con

Alamofire.upload(multipartFormData: { (multipartFormData) in

está funcionando como se esperaba En caso de una codificación exitosa de datos, devolverá el objeto de solicitud en el cierre de devolución de llamada.

NOTA IMPORTANTE: si usa el método que describí, bloqueará su hilo (en la mayoría de los casos, probablemente esté en el hilo principal) para copiar y codificar sus datos. Entonces no lo use para archivos grandes o lo que sea. Es asincrónico en Alamofire a propósito.


Por ejemplo, usando Alamofire 4.0.0 en Swift 3 :

(asegúrese de estar 4.0.0 preparado ya que parece que aún no ha actualizado su Alamofire)

Alamofire.upload(multipartFormData: { (multipartFormData) in // code }, to: URL, encodingCompletion: { (result) in // code })

o

Alamofire.upload(multipartFormData: { (multipartFormData) in // code }, with: URL, encodingCompletion: { (result) in // code })

Por lo tanto, los headers deben pasar por solicitud de URL:

let URL = try! URLRequest(url: "http://example.com", method: .get, headers: headers)


Prueba este y url establecidos como dijo @ pedrouan .

Alamofire.upload(multipartFormData: { (multipartFormData) in multipartFormData.append(imageData, withName: "xyz", fileName: "file.jpeg", mimeType: "image/jpeg") }, to: url) { (result) in //result }