POST
private func requestPost<T:Codable>(url:String, params:[String:Any], dataKey:String, data:Data, completion:@escaping (APIResult<T>)->Void) {
print("\n\n")
print("REQUEST POST Multipart")
print(url)
print("\n\n")
self.request = AF.upload(multipartFormData: { multiPart in
for (key, value) in params {
if let temp = value as? String {
multiPart.append(temp.data(using: .utf8)!, withName: key)
}
if let temp = value as? Int {
multiPart.append("\(temp)".data(using: .utf8)!, withName: key)
}
if let temp = value as? NSArray {
temp.forEach({ element in
let keyObj = key + "[]"
if let string = element as? String {
multiPart.append(string.data(using: .utf8)!, withName: keyObj)
} else
if let num = element as? Int {
let value = "\(num)"
multiPart.append(value.data(using: .utf8)!, withName: keyObj)
}
})
}
}
multiPart.append(data, withName: dataKey, fileName: "goodsImage.jpg", mimeType: "image/jpeg")
}, to: url, method: .post
, headers: nil)
self.request?.validate(statusCode: 200..<500)
self.request?.responseDecodable(of: T.self) { response in
switch response.result {
case .success(let data):
completion(.success(data))
case .failure(let error):
completion(.failure(error))
}
}
}
PUT
private func requestPut<T:Codable>(url:String, params:[String:Any], dataKey:String, data:Data, completion:@escaping (APIResult<T>)->Void) {
print("\n\n")
print("REQUEST Put Multipart")
print(url)
print("\n\n")
self.request = AF.upload(multipartFormData: { multiPart in
for (key, value) in params {
if let temp = value as? String {
multiPart.append(temp.data(using: .utf8)!, withName: key)
}
if let temp = value as? Int {
multiPart.append("\(temp)".data(using: .utf8)!, withName: key)
}
if let temp = value as? NSArray {
temp.forEach({ element in
let keyObj = key + "[]"
if let string = element as? String {
multiPart.append(string.data(using: .utf8)!, withName: keyObj)
} else
if let num = element as? Int {
let value = "\(num)"
multiPart.append(value.data(using: .utf8)!, withName: keyObj)
}
})
}
}
multiPart.append(data, withName: dataKey, fileName: "goodsImage.jpg", mimeType: "image/jpeg")
}, to: url, method: .put
, headers: nil)
.uploadProgress(queue: .main, closure: { progress in
//Current upload progress of file
print("Upload Progress: \(progress.fractionCompleted)")
})
self.request?.validate(statusCode: 200..<500)
self.request?.responseDecodable(of: T.self) { response in
switch response.result {
case .success(let data):
completion(.success(data))
case .failure(let error):
completion(.failure(error))
}
}
}