Send POST parameters with MultipartFormData using Alamofire, in iOS Swift Send POST parameters with MultipartFormData using Alamofire, in iOS Swift ios ios

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)        }    }