// I am using Alamofire method
func sendIMAGeAndParamsAndDoc(urlString:String,imageData:[String:Data],documentData : [String:Data],params:[String:AnyObject], success: @escaping (AnyObject) -> Void,failure: @escaping(Error) -> Void) {
if (NetworkReachabilityManager()?.isReachable)!{
let url = try! URLRequest.init(url: urlString, method: .post, headers: nil)
Alamofire.upload(multipartFormData: { (formdata) in
for (key, value) in params {
formdata.append(value.data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue).rawValue)!, withName: key)
}
for (key,value) in imageData{
formdata.append(value, withName: key, fileName: "a.jpeg", mimeType: "image/jpeg")
}
for (key,value) in documentData{
if self.ofExtension(ext: "pdf") == true{
formdata.append(value, withName: key, fileName: "a.pdf", mimeType: "application/pdf")
}else{
formdata.append(value, withName: key, fileName: "a.xls", mimeType: "application/octet-stream")}
}
}, with: url) { (encodingResult) in
switch encodingResult{
case .success(let upload,_,_):
upload.responseJSON(completionHandler: { (response) in
switch response.result{
case .success(_):
if (response.response?.statusCode == 200){
if let value = response.result.value {
success(value as AnyObject)
print(value)
}
}
else{
let value = response.result.value as? [String:Any]
let message = value!["error_message"] as? String
}
break
case .failure(let error):
print(error)
break
}
})
break
case .failure(let error):
print(error)
break
}
}
}
else{
}
}
// and use this func like this
sendIMAGeAndParams(urlString: "baseUrl", imageData: ["images" : imageArr as! Array<Data>], header: "", params: ["":""], success: { (success) in
print(success)
}) { (failure) in
print(failure)
}