ALDownloadManager包含了斷點(diǎn)續(xù)傳,多文件順序下載,多文件同時(shí)下載
同時(shí)下載
2017-12-11 11_50_44.gif
順序下載
2017-12-11 11_49_36.gif
外層調(diào)用:
單文件下載
ALDownloadManager.shared.download(url: self.testUrl)?.downloadProgress(nil).downloadResponse(nil)
多文件同時(shí)下載
ALDownloadManager.shared.changeDownloadState()
多文件順序下載
ALDownloadManager.shared.changeWaitState(completeClose: nil)
具體實(shí)現(xiàn):
下載方法(默認(rèn)斷點(diǎn)續(xù)傳)
func download() {
if let resumeData = cancelledData {
let destination = createDestination(destinationPath: destinationPath)
downloadRequest = manager?.download(resumingWith: resumeData, to: destination).response(completionHandler: { [weak self] (defresponse) in
self?.cancelledData = defresponse.resumeData
}).downloadProgress(closure: { (progress) in
self.progress = progress
}).response(completionHandler: { (defaultResponse) in
self.respons = defaultResponse
})
}else{
let destination = createDestination(destinationPath: destinationPath)
if let url = downloadurl {
downloadRequest = manager?.download(url, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil, to: destination).response(completionHandler: { [weak self] (defresponse) in
self?.cancelledData = defresponse.resumeData
}).downloadProgress(closure: { (progress) in
self.progress = progress
}).response(completionHandler: { (defaultResponse) in
self.respons = defaultResponse
})
}
}
self.state = ALDownloadState.Download
}
cancelledData 下載失敗時(shí)的數(shù)據(jù),恢復(fù)下載時(shí)需要用到
downloadRequest 每次下載時(shí)重新賦值,保證downloadRequest為最新值
取消下載
func cancel() {
downloadRequest?.cancel()
self.state = ALDownloadState.Cancel
}
Alamofire的取消下載,加上下載狀態(tài)的改變
掛起
func hangup() {
downloadRequest?.cancel()
self.state = ALDownloadState.Wait
}
下載任務(wù)掛起(等待下載): 順序下載時(shí)用到
同時(shí)下載
func changeDownloadState() {
self.downloadInfoArray = self.downloadInfoArray?.map({ (info) -> ALDownloadInfo in
if info.state == ALDownloadState.Download || info.state == ALDownloadState.Completed{}
else{
info.download()
}
return info
})
}
正在下載和已經(jīng)下載完成的任務(wù)保持,其余任務(wù)改變?yōu)橄螺d狀態(tài)
這里重點(diǎn)說(shuō)下順序下載
func changeWaitState(completeClose: ALDownloadCompleteClose?) {
self.completeClose = completeClose
var isDownloadFirst = false
self.downloadInfoArray = self.downloadInfoArray?.map({ (info) -> ALDownloadInfo in
if isDownloadFirst == false {
if info.state == ALDownloadState.Download {
isDownloadFirst = true
return info
}
}
if info.state == ALDownloadState.Completed {}
else{
info.hangup()
}
return info
})
if isDownloadFirst == false {
resumeFirstWillResume()
}
}
如果有任務(wù)下載,下載中的第一個(gè)任務(wù)保持下載狀態(tài),其余改變?yōu)榈却螺d;如果沒(méi)有任務(wù)下載,將所有任務(wù)改變?yōu)榈却螺d,再下載第一個(gè)等待任務(wù),這是我的思路,有更好方法的麻煩告知我