ALDownloadManager 基于Alamofire封装的下载器
ALDownloadManager包含了断点续传,多文件顺序下载,多文件同时下载
同时下载
顺序下载
外层调用: 单文件下载
ALDownloadManager.shared.download(url: self.testUrl)?.downloadProgress(nil).downloadResponse(nil)
复制代码
多文件同时下载
ALDownloadManager.shared.changeDownloadState()
复制代码
多文件顺序下载
ALDownloadManager.shared.changeWaitState(completeClose: nil)
复制代码
具体实现: 下载方法(默认断点续传)
func download() {if let resumeData = cancelledData {let destination = createDestination(destinationPath: destinationPath)downloadRequest = manager?.download(resumingWith: resumeData, to: destination).response(completionHandler: { [weak self] (defresponse) inself?.cancelledData = defresponse.resumeData}).downloadProgress(closure: { (progress) inself.progress = progress}).response(completionHandler: { (defaultResponse) inself.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) inself?.cancelledData = defresponse.resumeData}).downloadProgress(closure: { (progress) inself.progress = progress}).response(completionHandler: { (defaultResponse) inself.respons = defaultResponse})}}self.state = ALDownloadState.Download}
复制代码
cancelledData 下载失败时的数据,恢复下载时需要用到 downloadRequest 每次下载时重新赋值,保证downloadRequest为最新值
取消下载
func cancel() {downloadRequest?.cancel()self.state = ALDownloadState.Cancel}
复制代码
Alamofire的取消下载,加上下载状态的改变
挂起
func hangup() {downloadRequest?.cancel()self.state = ALDownloadState.Wait}
复制代码
下载任务挂起(等待下载): 顺序下载时用到
同时下载
func changeDownloadState() {self.downloadInfoArray = self.downloadInfoArray?.map({ (info) -> ALDownloadInfo inif info.state == ALDownloadState.Download || info.state == ALDownloadState.Completed{}else{info.download()}return info})}
复制代码
正在下载和已经下载完成的任务保持,其余任务改变为下载状态
这里重点说下顺序下载
func changeWaitState(completeClose: ALDownloadCompleteClose?) {self.completeClose = completeClosevar isDownloadFirst = falseself.downloadInfoArray = self.downloadInfoArray?.map({ (info) -> ALDownloadInfo inif isDownloadFirst == false {if info.state == ALDownloadState.Download {isDownloadFirst = truereturn info}}if info.state == ALDownloadState.Completed {}else{info.hangup()}return info})if isDownloadFirst == false {resumeFirstWillResume()}}
复制代码
如果有任务下载,下载中的第一个任务保持下载状态,其余改变为等待下载;如果没有任务下载,将所有任务改变为等待下载,再下载第一个等待任务,这是我的思路,有更好方法的麻烦告知我
就想要?? 欢迎戳这里 哈哈哈
发现bug或好的建议欢迎 issues or Email Yvente@163.com
ALDownloadManager 基于Alamofire封装的下载器相关推荐
- 基于iOS 10、realm封装的下载器
代码地址如下: http://www.demodashi.com/demo/11653.html 概要 在决定自己封装一个下载器前,我本以为没有那么复杂,可在实际开发过程中困难重重,再加上iOS10和 ...
- 基于iOS 10封装的下载器(支持存储读取、断点续传、后台下载、杀死APP重启后的断点续传等功能)
原文 资源来自:http://www.cocoachina.com/ios/20170316/18901.html 概要 在决定自己封装一个下载器前,我本以为没有那么复杂,可在实际开发过程中困难重重, ...
- 基于GMap.NET地图下载器的开发和研究
基于GMap.NET地图下载器的开发和研究 软件下载地址:https://pan.baidu.com/s/1ay0aOm3fiZ35vlfD8kFYFw 1.地图浏览功能 可以浏览谷歌地图.百度.ar ...
- 【CentOS7】在服务器上搭建基于Aria2的离线下载器
说明 在平时从网上下载文件时,有时会遇到即使一个几十兆的文件都要下一天的困境,如果使用远程服务器先登录ssh,再通过wget.scp的方式下载文件又比较费事.参考网上有人用Aria2搭建离线下载器 ...
- 基于ijkplayer封装ffmpeg播放器的录屏实现
关于ijkplayer我自己提出的issue的https://github.com/Bilibili/ijkplayer/issues/1166的一个小总结,还先不要期望我有完整代码给出,如果只想知道 ...
- 基于VLC封装的播放器VlcPlayer,可播放本地及网络视频,支持视频录制。
VlcPlayer.h文件 #ifndef VlcPlayer_H #define VlcPlayer_H #ifdef _WIN32 #include <basetsd.h> typed ...
- java 多线程下载器_Java多线程的下载器(1)
实现了一个基于Java多线程的下载器,可提供的功能有: 1. 对文件使用多线程下载,并显示每时刻的下载速度. 2. 对多个下载进行管理,包括线程调度,内存管理等. 一:单个文件下载的管理 1. 单文件 ...
- python编写下载器可暂停_python多进程断点续传分片下载器
python多进程断点续传分片下载器 标签:python 下载器 多进程 因为爬虫要用到下载器,但是直接用urllib下载很慢,所以找了很久终于找到一个让我欣喜的下载器.他能够断点续传分片下载,极大提 ...
- [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...
引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...
最新文章
- Android - Manifest 文件 详解
- OnsenUI 前端框架(三)
- iOS 关于第三方键盘
- python模块下载过程出错_尝试导入已安装的python模块时收到错误
- ok6410 3.0.1内核调用V4L接口出错解决方法(转)
- delphi打包python_使用Delphi 编写Python Extension
- account表里有什么 银行_模拟一个银行账户类Account,账户类中包括所有者、账号、余额、账户总数、存款、取款等信息。_学小易找答案...
- udf提权 udf.php,UDF提权
- 【PAT】1009. 说反话 (20)
- 操作系统MOOC课后习题答案
- 如何在Linux上执行exe文件
- Excel如何制作下拉列表
- Zooming Slow-Mo: Fast and Accurate One-Stage Space-Time Video Super-Resolution----视频超分辨
- 计算机主板上一般带有高速缓冲存储器cache,它是与什么之间的缓存,计算机微机原理与应用(一)...
- Implement int sqrt(int x).
- 勇于探索,及时总结,拥有自信!个人工作感受总结篇……
- Unity3D使用腾讯广点通广告
- 初步了解Panda3D 雾(Fog)
- Qt获取音频设备信息
- Qt扫盲-QMake 使用概述