Search code examples
swift2alamofire

Alamofire 2.0 Multipart Form Data Error


This code work before migrate to Swift 2.0 and Alamofire 2.0

manager.upload(requestMethod, NSURL(string: url)!, multipartFormData: { multipartFormData in
            for param in params {
                multipartFormData.appendBodyPart(data: param.1.dataUsingEncoding(NSUTF8StringEncoding)!, name: param.0)
            }

            multipartFormData.appendBodyPart(data: imageData!, name: "file", fileName: "tempImage", mimeType: "image/*") },
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .Success(let upload, _, _):
                    upload.responseJSON { _, response, result in
                        switch result {
                        case .Success(let data):
                            ...
                        case .Failure(let encodingError):
                            ...
                        }
                    }
                case .Failure(let encodingError):
                    ...
                }
        } )

Now the line:

upload.responseJson...

always return fail "FAILURE: Error Domain=NSURLErrorDomain Code=-999 "cancelled" "

Someone has managed to use the multipart in Alamofire 2.0 successfully and know what am I doing wrong?


Solution

  • In my case it had to do with additional headers. I put general headers like this:

    var defaultHeaders = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:]
        defaultHeaders["User-Agent"] = userAgent
    
        if let ip = ifAddress {
            defaultHeaders["X-Forwarded-For"] = ip
        }
    
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        configuration.HTTPAdditionalHeaders = defaultHeaders
        manager = Alamofire.Manager(configuration: configuration)
    

    And for additional headers that depend on a specific condition I put in the request itself:

    if condition {
        headers = ["Accept": contentType]
    }
    
    manager!.request(requestMethod, url, parameters: params, headers: headers).responseJSON { response in
    …