Dmitry
Dmitry

Reputation: 3079

Alamofire 4 multipart

I try to create multipart request using Alamofire 4. I wont to add [String: AnyObject] as part. But when multipartFormData appending bool or [Int] from my payload dict app crashed! Where is my mistake?

    let payload: [String: AnyObject] = [
        "key1": "val1" as AnyObject,
        "key2": true as AnyObject,
        "key3" : [1,2,3,4] as AnyObject
    ]

    let requestString = "http://www.url.com/api/action"

    Alamofire.upload(multipartFormData: { (multipartFormData) in
        for (key, value) in payload {
            multipartFormData.append(value.data(using: String.Encoding.utf8.rawValue, allowLossyConversion: false)!, withName: "request", fileName: key, mimeType: "application/json")
        }
        multipartFormData.append(imageUrl, withName: "fileData", fileName: "image", mimeType: "image/png")

    },  to: requestString, method: .post , headers: ["Content-Type": "multipart/form-data"], encodingCompletion: { (result) in
        switch result {
        case .success(let upload, _, _):

            upload.uploadProgress(closure: { (progress) in
                print(progress.fractionCompleted * 100)
            })

            upload.responseJSON(completionHandler: { (response) in
            })
        case .failure(let error):
            print(error)

        }
    })

Upvotes: 0

Views: 491

Answers (1)

Ekta Padaliya
Ekta Padaliya

Reputation: 5799

You are sending wrong param. Try below code for Alamofire 4.

let payload: [String: AnyObject] = [
    "key1": "val1" as AnyObject,
    "key2": true as AnyObject,
    "key3" : [1,2,3,4] as AnyObject
]

let requestString = "http://www.url.com/api/action"

Alamofire.upload(multipartFormData: { (multipartFormData) in
    multipartFormData.append(UIImageJPEGRepresentation(self.photoImageView.image!, 0.5)!, withName: "photo_path", fileName: "swift_file.jpeg", mimeType: "image/jpeg")
    for (key, value) in payload {
        multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
    }
    }, to: requestString, method: .post , headers:nil, encodingCompletion: { (result) in
    switch result {
    case .success(let upload, _, _):

        upload.uploadProgress(closure: { (progress) in
            print(progress.fractionCompleted * 100)
        })

        upload.responseJSON(completionHandler: { (response) in
        })
    case .failure(let error):
        print(error)

    }
})

Upvotes: 1

Related Questions