I'm trying to send an uploaded image to server. I'm getting the image from photos successfully, and I'm attaching it to a UIImageView in ViewController. Now I need to send this image to server along with other data. I'm able to send all data successfully except the image.
Here is my func:
func placeOrder(withOrder: Order) {
let returnedJobId: String? = UserDefaults.standard.object(forKey: "jobId") as? String
let returnedOrderPrice: String? = UserDefaults.standard.object(forKey: "orderPrice") as? String
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let currentDateTime = formatter.string(from: Date())
let selectedImage = imagePlaceHolder.image!
let uploadedFile = selectedImage.jpegData(compressionQuality: 0.5)
DispatchQueue.main.async {
let date = self.chosenTimeDateTextFieldDisplay.text!
let address = self.addressField.text!
let phone = self.phoneField.text!
let comments = self.commentsEntryView.text!
let file = uploadedFile
let jobId = returnedJobId!
let price = returnedOrderPrice!
let headers = [
"content-type" : "multipart/form-data",//application/x-www-form-urlencoded",
"cache-control": "no-cache",
"postman-token": "dded3e97-77a5-5632-93b7-dec77d26ba99"
]
let user = CoreDataFetcher().returnUser()
let provider = user.provider_id
let userID = user.id
let userType = user.user_type
let postData = NSMutableData(data: "data={\"user_type\":\"\(userType)\",\"job_id\":\"\(jobId)\",\"user_id\":\"\(userID)\",\"provider_id\":\"\(provider)\",\"order_placing_time\":\"\(currentDateTime)\",\"order_start_time\":\"\(date)\",\"order_address\":\"\(address)\",\"order_phone\":\"\(phone)\",\"order_comments\":\"\(comments)\",\"order_price\":\"\(price)\",\"$_FILES\":\"\(file!)\"}".data(using: String.Encoding.utf8)!)
let request = NSMutableURLRequest(url: NSURL(string: "http://Api/v2/placeOrder")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error!)
} else {
if let dataNew = data, let responseString = String(data: dataNew, encoding: .utf8) {
print(responseString)
DispatchQueue.main.async {
do {
let fetcher = CoreDataFetcher()
let json = try JSON(data: data!, options: .allowFragments)
let answer = json["answer"]
let status = json["status"]
let orderID = answer.int!
if status == "ok" {
print("Status is OK")
}
fetcher.addOrderID(orderId: orderID, toOrder: withOrder)
print("Order id has been saved!")
} catch {
print("Order ID Counldn't be Saved!")
}
}
}
}
})
dataTask.resume()
}
}
This method isn't working. as it should be made a multipart form data
How to rewrite my func to be a multipart form data to convert the image to PNG file and attach it in the API request?