//下载文件的保存路径( var destination:DownloadRequest.DownloadFileDestination! //用于停止下载时,保存已下载的部分 var cancelledData: Data?
//下载请求对象
var downloadRequest: DownloadRequest!
override func viewDidLoad() {
super.viewDidLoad()
//设置下载路径。保存到用户文档目录,文件名不变,如果有同名文件则会覆盖
self.destination = { _, response in
let documentsURL = FileManager.default.urls(for: .documentDirectory,
in: .userDomainMask)[0]
let fileURL = documentsURL.appendingPathComponent(response.suggestedFilename!)
//两个参数表示如果有同名文件则会覆盖,如果路径中文件夹不存在则会自动创建
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}
//页面加载完毕就自动开始下载
self.downloadRequest = Alamofire.download(
"http://dldir1.qq.com/qqfile/qq/QQ7.9/16621/QQ7.9.exe", to: destination)
self.downloadRequest.downloadProgress(queue: DispatchQueue.main,
closure: downloadProgress) //下载进度
self.downloadRequest.responseData(completionHandler: downloadResponse) //下载停止响应
}
//下载过程中改变进度条
func downloadProgress(progress: Progress) {
//进度条更新
self.progress.setProgress(Float(progress.fractionCompleted), animated:true)
print("当前进度:\(progress.fractionCompleted*100)%")
}
//下载停止响应(不管成功或者失败)
func downloadResponse(response: DownloadResponse<Data>) {
switch response.result {
case .success(let data):
//self.image = UIImage(data: data)
print("文件下载完毕: \(response)")
case .failure:
self.cancelledData = response.resumeData //意外终止的话,把已下载的数据储存起来
}
}
//停止按钮点击
@IBAction func stopBtnClick(_ sender: AnyObject) {
self.downloadRequest?.cancel()
self.stopBtn.isEnabled = false
self.continueBtn.isEnabled = true
}
//继续按钮点击
@IBAction func continueBtnClick(_ sender: AnyObject) {
if let cancelledData = self.cancelledData {
self.downloadRequest = Alamofire.download(resumingWith: cancelledData,
to: destination)
self.downloadRequest.downloadProgress(queue: DispatchQueue.main,
closure: downloadProgress) //下载进度
self.downloadRequest.responseData(completionHandler: downloadResponse) //下载停止响应
self.stopBtn.isEnabled = true
self.continueBtn.isEnabled = false
}
}
复制代码