There are various ways to download the files from a URL but the best way to download it using Alamofire because it provides us various sub functionalities like:
a) downloadProgress : For showing the fraction completed while downloading the files.
b) validation : Allows to check the errors while downloading the files.
c) responseData: Contains the response for download.
Here is the code for using the Almofire for downloading from the URL :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
// MARK: - Load URL func downloadUsingAlamofire(url: URL, fileName: String) { let manager = Alamofire.SessionManager.default let destination: DownloadRequest.DownloadFileDestination = { _, _ in self.documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] self.documentsURL.appendPathComponent(fileName) print(self.documentsURL) return (self.documentsURL, [.removePreviousFile]) } manager.download(url, to: destination) .downloadProgress(queue: .main, closure: { (progress) in //progress closure print(progress.fractionCompleted) }) .validate { request, response, temporaryURL, destinationURL in // Custom evaluation closure now includes file URLs (allows you to parse out error messages if necessary) GlobalData.sharedInstance.dismissLoader() return .success } .responseData { response in if let destinationUrl = response.destinationURL as? URL { print(destinationUrl) if let statusCode = (response as? HTTPURLResponse)?.statusCode { print("Success: \(statusCode)") GlobalData.sharedInstance.dismissLoader() } let AC = UIAlertController(title:GlobalData.sharedInstance.language(key: "success"), message:GlobalData.sharedInstance.language(key: "filesavemessage"), preferredStyle: .alert) let okBtn = UIAlertAction(title: "view", style: .default, handler: {(_ action: UIAlertAction) -> Void in self.documentPathUrl = response.destinationURL //open file }) let noBtn = UIAlertAction(title: GlobalData.sharedInstance.language(key: "cancel"), style: .destructive, handler: {(_ action: UIAlertAction) -> Void in }) AC.addAction(okBtn) AC.addAction(noBtn) self.present(AC, animated: true, completion: { }) } else { GlobalData.sharedInstance.dismissLoader() } } } |
I hope from this, it will make you more comfortable using Alamofire functionality for downloading from the URL into your app. Thanks for tuning in once again!