File Upload
func imageUploadRequest()
{
let mName = nameTextfield.text
let mSerial = serialTextfield.text
let mEtc = etcTextfield.text
let mDate = resistDate
let mModel = modelTextfield.text
let myUrl = NSURL(string: Config.URL.fileUploadUrl);
let request = NSMutableURLRequest(url:myUrl! as URL);
request.httpMethod = "POST";
let param = [
"NumberText" : String(Num),
"nameText" : mName ?? "",
"serialText" : mSerial ?? "",
"etcText" : mEtc ?? "",
"p_dateText" : mDate ,
"modelText" : mModel ?? ""
]
let boundary = generateBoundaryString()
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
let imageData = UIImageJPEGRepresentation(imagePicked.image!, 1)
if(imageData==nil) { return; }
request.httpBody = createBodyWithParameters(parameters: param , filePathKey: "file", imageDataKey: imageData! as NSData, boundary: boundary) as Data
let task = URLSession.shared.dataTask(with: request as URLRequest) {
data, response, error in
if error != nil {
print("error=\(String(describing: error))")
return
}
print("******* response = \(String(describing: response))")
let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
print("****** response data = \(responseString!)")
do {
let json = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary
print(json ?? "json null값" )
DispatchQueue.main.async(execute: {
self.myActivityIndicator.stopAnimating()
self.imagePicked.image = nil;
});
}catch
{
print(error)
}
}
task.resume()
}
func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData {
let body = NSMutableData();
if parameters != nil {
for (key, value) in parameters! {
let s1 = "--\(boundary)\r\n"
let s2 = "Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n"
let s3 = "\(value)\r\n"
let d1: NSData = (s1 as NSString).data(using: String.Encoding.utf8.rawValue)! as NSData
let d2: NSData = (s2 as NSString).data(using: String.Encoding.utf8.rawValue)! as NSData
let d3: NSData = (s3 as NSString).data(using: String.Encoding.utf8.rawValue)! as NSData
body.append(d1 as Data)
body.append(d2 as Data)
body.append(d3 as Data)
}
}
let filename = String(Num)+".png"
let mimetype = "image/png"
let s4 = "--\(boundary)\r\n"
let s5 = "Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n"
let s6 = "Content-Type: \(mimetype)\r\n\r\n"
let s7 = "\r\n"
let d4: NSData = (s4 as NSString).data(using: String.Encoding.utf8.rawValue)! as NSData
let d5: NSData = (s5 as NSString).data(using: String.Encoding.utf8.rawValue)! as NSData
let d6: NSData = (s6 as NSString).data(using: String.Encoding.utf8.rawValue)! as NSData
let d7: NSData = (s7 as NSString).data(using: String.Encoding.utf8.rawValue)! as NSData
body.append(d4 as Data)
body.append(d5 as Data)
body.append(d6 as Data)
body.append(imageDataKey as Data)
body.append(d7 as Data)
let s8 = "--\(boundary)--\r\n"
let d8: NSData = (s8 as NSString).data(using: String.Encoding.utf8.rawValue)! as NSData
body.append(d8 as Data)
return body
}
func generateBoundaryString() -> String {
return "Boundary-\(NSUUID().uuidString)"
}