How to upload image with parameters using Alamofire in Swift How to upload image with parameters using Alamofire in Swift xcode xcode

How to upload image with parameters using Alamofire in Swift


you can use Alamofire 3.0+ below code

func uploadImageAndData(){    //parameters    let gender    = "M"    let firstName = "firstName"    let lastName  = "lastName"    let dob       = "11-Jan-2000"    let aboutme   = "aboutme"    let token     = "token"    var parameters = [String:AnyObject]()    parameters = ["gender":gender,                  "firstName":firstName,                  "dob":dob,                  "aboutme":about,                  "token":token,                  "lastName":lastName]    let URL = "http://yourserviceurl/"    let image = UIImage(named: "image.png")    Alamofire.upload(.POST, URL, multipartFormData: {        multipartFormData in        if let imageData = UIImageJPEGRepresentation(image, 0.6) {            multipartFormData.appendBodyPart(data: imageData, name: "image", fileName: "file.png", mimeType: "image/png")        }        for (key, value) in parameters {            multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)        }    }, encodingCompletion: {        encodingResult in        switch encodingResult {        case .Success(let upload, _, _):            print("s")            upload.responseJSON {                 response in                print(response.request)  // original URL request                print(response.response) // URL response                print(response.data)     // server data                print(response.result)   // result of response serialization                if let JSON = response.result.value {                    print("JSON: \(JSON)")                }            }        case .Failure(let encodingError):            print(encodingError)        }    })}


SWIFT 2 AlamoFire Simple Image Upload (REST API)

@amit gupta It seems answer contains big overhead. AlamoFire contain load of simplified solution. Alamofire.request method contains several simplified overload which can use to upload in simple manner. By using Alamofire.request( method developer can get rid of encoding overhead.

HTTP Status 415 gives because of not specifying the correct media type.

Please check my solution below.

import UIKitimport Alamofireclass ViewController: UIViewController {    @IBOutlet var imageView: UIImageView!    @IBOutlet var btnUpload: UIButton!    override func viewDidLoad() {        super.viewDidLoad()    }    func successDataHandler(responseData:String){        print ("IMAGE UPLOAD SUCCESSFUL    !!!")    }    func failureDataHandler(errorData:String){        print ("  !!!   IMAGE UPLOAD FAILURE   !!! ")    }    @IBAction func actionUpload(sender: AnyObject) {        let URL = "http://m8coreapibeta.azurewebsites.net/api/cards/SaveImages"        let postDataProlife:[String:AnyObject] = ["CardId":(dataCardDetail?.userId)!,"ImageType":1,"ImageData":imageView.image!]        uplaodImageData(URL, postData: postDataProlife, successHandler: successDataHandler, failureHandler: failureDataHandler)    }    func uplaodImageData(RequestURL: String,postData:[String:AnyObject]?,successHandler: (String) -> (),failureHandler: (String) -> ()) -> () {        let headerData:[String : String] = ["Content-Type":"application/json"]        Alamofire.request(.POST,RequestURL, parameters: postData, encoding: .URLEncodedInURL, headers: headerData).responseString{ response in            switch response.result {            case .Success:                print(response.response?.statusCode)                successHandler(response.result.value!)            case .Failure(let error):                failureHandler("\(error)")            }        }    }    override func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()        // Dispose of any resources that can be recreated.    }}


Almaofire with swift 3.0

Alamofire.upload(multipartFormData: { multipartFormData in    var index = 1    for image in imageArray {        let imageData: Data = (UIImageJPEGRepresentation(image, 1.0) as Data?)!        multipartFormData.append(imageData, withName: "home-\(index)", fileName: "home-\(index)", mimeType: "image/jpeg")        index += 1    }    }, with: requestName, encodingCompletion: { result in        switch result {        case .success(let upload, _, _):            upload.responseJSON { response in                print("Image(s) Uploaded successfully:\(response)")            }        case .failure(let encodingError):            print("encodingError:\(encodingError)")        }})