使用URLSession實(shí)現(xiàn)斷點(diǎn)續(xù)傳

一圖簡(jiǎn)單了解URLSession,所有的網(wǎng)絡(luò)請(qǐng)求任務(wù)都是由URLSession創(chuàng)建并掛起


思路圖晚點(diǎn)補(bǔ)上,先上代碼

下載管理器代碼

class?DownLoadManager:NSObject{

? ? static let instance: DownLoadManager = DownLoadManager()


? ? /// 單例

? ? ///

? ? /// -Returns: 返回對(duì)象本身

? ? class?func?sharedManager() ->DownLoadManager{

? ? ? ? return?instance

? ? }


? ? /// 存儲(chǔ)下載任務(wù)

? ? lazy?var?downLoadCache:Dictionary = {

? ? ? ? let?dic =Dictionary()

? ? ? ? return?dic

? ? }()


?? /// 根據(jù)URL下載任務(wù)

?? ///

?? /// - Parameters:

?? ///? - url: 鏈接

?? ///? - progress: 進(jìn)度

?? ///? - compelete: 完成回調(diào)

?? ///? - faile: 失敗回調(diào)

?? func?downLoadFile(withUrl url:String,progress:@escaping(_progress:Float)->Void,compelete:@escaping(_filePath:String)->Void,faile:@escaping(_error:String)->Void) ->Void{

? ? let?downLoadHepler =downLoadCache[url]

? ? if?downLoadHepler !=nil?{

? ? ? ? debugPrint("此任務(wù)下載中。。。")

? ? }else{

? ? ? ? let?downLoadHepler =DownLoaderHepler()

? ? ? ? downLoadCache[url] = downLoadHepler

? ? ? ? downLoadHepler.downLoadFile(withUrl: url, progress: progress, compelete: { (filePath)?in

? ? ? ? ? ? self.downLoadCache.removeValue(forKey: url)

? ? ? ? ? ? compelete(filePath)

? ? ? ? }, faile: faile)


? ? }



? ? }


? ? /// 暫停

? ? ///

? ? /// -Parameterurl: 鏈接

? ? func?pasume(withUrl url:String) ->Void{

? ? ? ? let?downLoadHepler =downLoadCache[url]

? ? ? ? if?downLoadHepler !=nil?{

? ? ? ? ? ? downLoadHepler?.pasume()

? ? ? ? }else{

? ? ? ? ? ? debugPrint("此任務(wù)不存在\(url)")

? ? ? ? }


? ? }


? ? /// 繼續(xù)

? ? ///

? ? /// -Parameterurl: 繼續(xù)鏈接

? ? func?resume(withUrl url:String) ->Void{

? ? ? ? let?downLoadHepler =downLoadCache[url]

? ? ? ? if?downLoadHepler !=nil{

? ? ? ? ? ? downLoadHepler?.resume()

? ? ? ? }else{

? ? ? ? ? ? debugPrint("此任務(wù)不存在\(url)")

? ? ? ? }

? ? }


}

DownLoadManager下載代碼


class?DownLoadManager:NSObject{

? ? static let instance: DownLoadManager = DownLoadManager()


? ? /// 單例

? ? ///

? ? /// -Returns: 返回對(duì)象本身

? ? class?funcsharedManager() ->DownLoadManager{

? ? ? ? return?instance

? ? }


? ? /// 存儲(chǔ)下載任務(wù)

? ? lazy?var?downLoadCache:Dictionary = {

? ? ? ? let?dic =Dictionary()

? ? ? ? return?dic

? ? }()


?? /// 根據(jù)URL下載任務(wù)

?? ///

?? /// - Parameters:

?? ///? - url: 鏈接

?? ///? - progress: 進(jìn)度

?? ///? - compelete: 完成回調(diào)

?? ///? - faile: 失敗回調(diào)

?? func?downLoadFile(withUrl url:String,progress:@escaping(_progress:Float)->Void,compelete:@escaping(_filePath:String)->Void,faile:@escaping(_error:String)->Void) ->Void{

? ? let?downLoadHepler =downLoadCache[url]

? ? if?downLoadHepler !=nil{

? ? ? ? debugPrint("此任務(wù)下載中。。。")

? ? }else{

? ? ? ? let?downLoadHepler =DownLoaderHepler()

? ? ? ? downLoadCache[url] = downLoadHepler

? ? ? ? downLoadHepler.downLoadFile(withUrl: url, progress: progress, compelete: { (filePath)in

? ? ? ? ? ? self.downLoadCache.removeValue(forKey: url)

? ? ? ? ? ? compelete(filePath)

? ? ? ? }, faile: faile)


? ? }



? ? }


? ? /// 暫停

? ? ///

? ? /// -Parameterurl: 鏈接

? ? func?pasume(withUrl url:String) ->Void{

? ? ? ? let?downLoadHepler =downLoadCache[url]

? ? ? ? if?downLoadHepler !=nil{

? ? ? ? ? ? downLoadHepler?.pasume()

? ? ? ? }else{

? ? ? ? ? ? debugPrint("此任務(wù)不存在\(url)")

? ? ? ? }


? ? }


? ? /// 繼續(xù)

? ? ///

? ? /// -Parameterurl: 繼續(xù)鏈接

? ? func?resume(withUrl url:String) ->Void{

? ? ? ? let?downLoadHepler =downLoadCache[url]

? ? ? ? if?downLoadHepler !=nil{

? ? ? ? ? ? downLoadHepler?.resume()

? ? ? ? }else{

? ? ? ? ? ? debugPrint("此任務(wù)不存在\(url)")

? ? ? ? }

? ? }


}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容