Carga de image por lotes con cuerpo de request

Intentaba upload imágenes desde la aplicación Swift a un server basado en PHP. He recostackdo algunos códigos relacionados e bash usarlo, pero la carga no fue exitosa. Las siguientes son las funciones para upload imágenes con el cuerpo de request adicional que he realizado, junto con la respuesta que obtuve.

Nota : El server está funcionando, y he intentado con la aplicación RestClient para probar. Acepta en multipart/form-data y acepta todas las requestes en cuerpo.

Función de carga

 func imageUploadRequest(){ let parameters = [ "activity1": selectedActivity+1, "activity2": selectedActivity2+1, "activity3": selectedActivity3+1, "activity_id": selectedActID ] let boundary = generateBoundaryString() let url = NSURL(string: "http://myServerURL/uploadImage") let request = NSMutableURLRequest(URL: url!) request.HTTPMethod = "POST" request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") let newImageData = UIImageJPEGRepresentation(self.imageView.image, 1) let newImage2Data = UIImageJPEGRepresentation(self.imageView2.image, 1) let newImage3Data = UIImageJPEGRepresentation(self.imageView3.image, 1) request.HTTPBody = createBodyWithParameters(parameters, imageDataKey: ["image1": newImageData, "image2": newImage2Data, "image3": newImage3Data], boundary: boundary) . . . } 

CreateBodyWithParameters Function

 func createBodyWithParameters(parameters: [String: Int]?, imageDataKey: [String: NSData]?, boundary: String) -> NSData { var body = NSMutableData(); if parameters != nil { for (key, value) in parameters! { body.appendString("–\(boundary)\r\n") body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") body.appendString("\(value)\r\n") } } if imageDataKey != nil { for (key, value) in imageDataKey! { let filename = "user-profile.jpg" let mimetype = "image/jpg" body.appendString("--\(boundary)\r\n") body.appendString("Content-Disposition: form-data; name=\"\(key)\"; filename=\"\(filename)\"\r\n") body.appendString("Content-Type: \(mimetype)\r\n\r\n") body.appendData(value) body.appendString("\r\n") } } body.appendString("\r\n-–\(boundary)-–\r\n") return body } 

Respuesta que recibí:

 <NSHTTPURLResponse: 0x170439cc0> { URL: http://myServerURL/uploadImage } { status code: 500, headers { "Cache-Control" = "no-cache"; Connection = close; "Content-Type" = "text/html"; Date = "Thu, 04 Jun 2015 01:52:46 GMT"; Server = Apache; "Set-Cookie" = "laravel_session=eyJpdiI6IjlyaWRKMjdBbTZiWWluSGk3QU9lcXc9PSIsInZhbHVlIjoiWlwvOHdtcURjOHlSTWR3MmtYNm0rbHlEaWJKSTMrZk1hWkVvSHpzTVdrcE5SQTl2bFkxemlJYUNLYkZMZjJxdEFCMFwvWENlMzFReW9GU3Jkam5XSmxvZz09IiwibWFjIjoiYWJmYWU2MDU2MGRkNzM1MjcyNWM1YjFjMDJjZjA5MmNjNjA4MzA3ZGE5MWMzNmJiZmE3ZTg3Y2I2OWI4N2E4NiJ9; expires=Thu, 04-Jun-2015 03:52:48 GMT; Max-Age=7200; path=/; httponly"; } } 

En última instancia, tendrás que verificar tu server por el error 500 que estás recibiendo. Si sospechas que es la multiparte, noto que tu primer límite tiene un guion, debería haber dos:

 body.appendString("-–\(boundary)\r\n") 

Además, no estoy seguro si esto es un problema, pero intenta usar otro valor de límite si tienes varias imágenes. Vea el último ejemplo aquí .

build forms multiparte es un dolor en mi opinión. Si fuera tú, utilizaría una biblioteca de connection como Alamofire o AFNetworking.