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