使用URLSession实现断点续传

一图简单了解URLSession,所有的网络请求任务都是由URLSession创建并挂起


思路图晚点补上,先上代码

下载管理器代码

class DownLoadManager:NSObject{

    static let instance: DownLoadManager = DownLoadManager()


    /// 单例

    ///

    /// -Returns: 返回对象本身

    class func sharedManager() ->DownLoadManager{

        return instance

    }


    /// 存储下载任务

    lazy var downLoadCache:Dictionary = {

        let dic =Dictionary()

        return dic

    }()


   /// 根据URL下载任务

   ///

   /// - Parameters:

   ///  - url: 链接

   ///  - progress: 进度

   ///  - compelete: 完成回调

   ///  - faile: 失败回调

   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("此任务下载中。。。")

    }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("此任务不存在\(url)")

        }


    }


    /// 继续

    ///

    /// -Parameterurl: 继续链接

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

        let downLoadHepler =downLoadCache[url]

        if downLoadHepler !=nil{

            downLoadHepler?.resume()

        }else{

            debugPrint("此任务不存在\(url)")

        }

    }


}

DownLoadManager下载代码


class DownLoadManager:NSObject{

    static let instance: DownLoadManager = DownLoadManager()


    /// 单例

    ///

    /// -Returns: 返回对象本身

    class funcsharedManager() ->DownLoadManager{

        return instance

    }


    /// 存储下载任务

    lazy var downLoadCache:Dictionary = {

        let dic =Dictionary()

        return dic

    }()


   /// 根据URL下载任务

   ///

   /// - Parameters:

   ///  - url: 链接

   ///  - progress: 进度

   ///  - compelete: 完成回调

   ///  - faile: 失败回调

   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("此任务下载中。。。")

    }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("此任务不存在\(url)")

        }


    }


    /// 继续

    ///

    /// -Parameterurl: 继续链接

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

        let downLoadHepler =downLoadCache[url]

        if downLoadHepler !=nil{

            downLoadHepler?.resume()

        }else{

            debugPrint("此任务不存在\(url)")

        }

    }


}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容