Dzeremix
Dzeremix

Reputation: 478

Alamofire - multipart form data key:value

I am trying to make video upload on the server. I am using Alamofire. I'm getting closer to a solution but ... I have a multipart data form method, which includes such parameters "param1":"test", "param2":["1", "2"], param3:{"test": "123 "}

param1 still place a function Alamofire.upload:

multipartFormData.appendBodyPart (date "test" .dataUsingEncoding (NSUTF8StringEncoding, allowLossyConversion: false) !, name: "param1")

How to add param2 and param3?

There is my method:

    Alamofire.upload(
                .POST,
                url,
                headers: headers,
                multipartFormData: { multipartFormData in

                    multipartFormData.appendBodyPart(data: "test".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param1")

//it is only visualization what I want to do. I know that it isn't working.
                    //multipartFormData.appendBodyPart(data: ["1", "2"].dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param2")
                    //multipartFormData.appendBodyPart(data: {"test": "123 "}.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param3")

                    let fileURL = DataManager().getFileDirectionForFile("movie.mp4")
                    multipartFormData.appendBodyPart(fileURL: fileURL, name: "file")
                },
                encodingCompletion: { encodingResult in
                    switch encodingResult {

                    case .Success(let upload, _, _):
                        upload.responseString { response in
                            debugPrint(response)
                        }

                    case .Failure(let encodingError):
                        print(encodingError)
                    }
                }

Upvotes: 2

Views: 1297

Answers (2)

Bhautik Ziniya
Bhautik Ziniya

Reputation: 1564

First create the param dict to pass in request.

let array = ["1","2"]
let dict = [
    "test" : "123"
]

let params = [
    "param1" : "test",
    "param2" : array,
    "param3" : dict
]

and then pass that params variable to Alamofire.upload

Alamofire.upload(.POST, url, multipartFormData: { (multipartFormData) in
        multipartFormData.appendBodyPart(data: params["param1"]!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name: "param1")
        multipartFormData.appendBodyPart(data: params["param2"]!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name: "param2")
        multipartFormData.appendBodyPart(data: params["param3"]!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name: "param3")
        }) { (encodingResult) in
            switch encodingResult {

            case .Success(let upload, _, _):
                upload.responseString { response in
                    debugPrint(response)
                }

            case .Failure(let encodingError):
                print(encodingError)
            }
    }

Upvotes: 5

Yury
Yury

Reputation: 6114

It depends from your API. My API in same situation can handle this format:

multipartFormData.appendBodyPart(data: "1".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param2[0]")
multipartFormData.appendBodyPart(data: "2".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param2[1]")
multipartFormData.appendBodyPart(data: "123 ".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param3[test]")

Maybe will work for you too.

Upvotes: 0

Related Questions