Send POST parameters with MultipartFormData using Alamofire, in iOS Swift
I found the solution :) finally.
We can append data in the request as multipartformdata.
Below is my code.
Alamofire.upload( .POST, URLString: fullUrl, // http://httpbin.org/post multipartFormData: { multipartFormData in multipartFormData.appendBodyPart(fileURL: imagePathUrl!, name: "photo") multipartFormData.appendBodyPart(fileURL: videoPathUrl!, name: "video") multipartFormData.appendBodyPart(data: Constants.AuthKey.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"authKey") multipartFormData.appendBodyPart(data: "\(16)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"idUserChallenge") multipartFormData.appendBodyPart(data: "comment".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"comment") multipartFormData.appendBodyPart(data:"\(0.00)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"latitude") multipartFormData.appendBodyPart(data:"\(0.00)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"longitude") multipartFormData.appendBodyPart(data:"India".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"location") }, encodingCompletion: { encodingResult in switch encodingResult { case .Success(let upload, _, _): upload.responseJSON { request, response, JSON, error in } case .Failure(let encodingError): } } )
EDIT 1: For those who are trying to send an array instead of float, int or string, They can convert their array or any kind of data-structure in Json String, pass this JSON string as a normal string. And parse this json string at backend to get original array
In Alamofire 4 it is important to add the body data before you add the file data!
let parameters = [String: String]()[...]self.manager.upload( multipartFormData: { multipartFormData in for (key, value) in parameters { multipartFormData.append(value.data(using: .utf8)!, withName: key) } multipartFormData.append(imageData, withName: "user", fileName: "user.jpg", mimeType: "image/jpeg") }, to: path, [...])
This is how i solve my problem
let parameters = [ "station_id" : "1000", "title": "Murat Akdeniz", "body": "xxxxxx"]let imgData = UIImageJPEGRepresentation(UIImage(named: "1.png")!,1) Alamofire.upload( multipartFormData: { MultipartFormData in // multipartFormData.append(imageData, withName: "user", fileName: "user.jpg", mimeType: "image/jpeg") for (key, value) in parameters { MultipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key) } MultipartFormData.append(UIImageJPEGRepresentation(UIImage(named: "1.png")!, 1)!, withName: "photos[1]", fileName: "swift_file.jpeg", mimeType: "image/jpeg") MultipartFormData.append(UIImageJPEGRepresentation(UIImage(named: "1.png")!, 1)!, withName: "photos[2]", fileName: "swift_file.jpeg", mimeType: "image/jpeg") }, to: "http://platform.twitone.com/station/add-feedback") { (result) in switch result { case .success(let upload, _, _): upload.responseJSON { response in print(response.result.value) } case .failure(let encodingError): break print(encodingError) } }