Skip to content

Instantly share code, notes, and snippets.

@danielcosta27
Last active December 19, 2017 17:09
Show Gist options
  • Save danielcosta27/0dc51655bc124cf23525f060a61a880b to your computer and use it in GitHub Desktop.
Save danielcosta27/0dc51655bc124cf23525f060a61a880b to your computer and use it in GitHub Desktop.
Snippet of Network wrapper service using Alamofire upload (Swift 3)
//Methods to be inside the network wrapper service
private class func _prepareRequest (_ strUrl: String, params: JSON?, method: String = Methods.GET) -> URLRequest {
var signature = ""
let url = URL(string: Config.API_URL + strUrl)!
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = method
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.setValue(Config.APPID, forHTTPHeaderField: CustomHeaders.APP_ID)
if SessionService.isLogged() {
urlRequest.setValue(SessionService.getToken(), forHTTPHeaderField: CustomHeaders.USERTOKEN)
}
return urlRequest
}
class func UPLOAD(_ strURL: String, data:Data, success:@escaping (JSON) -> Void, failure:@escaping (NSError) -> Void) {
let urlRequest = _prepareRequest(strURL, params: nil, method: Methods.POST)
Alamofire.upload(multipartFormData: {
formData in
formData.append(data, withName: "upload", fileName: "newTempPhoto.jpg", mimeType: "image/jpeg")
},
with: urlRequest,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { responseObject in
let resJson = JSON(responseObject.result.value!)
if resJson["status"].bool != nil && resJson["status"].bool! {
success(resJson)
} else {
let errorCode = (resJson["token"]["CODE"].number != nil) ? resJson["token"]["CODE"].number as! Int : 999
failure(NSError(domain:Bundle.main.bundleIdentifier!, code:errorCode, userInfo:resJson.dictionaryObject))
}
}
break
case .failure(let error as NSError):
failure(error)
break
default:
failure(NSError(domain:Bundle.main.bundleIdentifier!, code:999, userInfo:["error": "Unknown error"]))
}
}
)
}
//method to be called from Viewcontroller
func uploadPhoto (_ image:UIImage) {
if let data = UIImageJPEGRepresentation(image, 80) {
NetworkService.UPLOAD("/v1/upload",
data: data,
success: { (JSONResponse) -> Void in
//success code
},
failure: { (error) -> Void in
SwAlert.showAlert(
NSLocalizedString("alert.error", comment: ""),
message: NSLocalizedString("alert.generic_description", comment: ""),
buttonTitle: NSLocalizedString("alert.button.ok", comment: "")
)
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment