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封装的下载器相关推荐

  1. 基于iOS 10、realm封装的下载器

    代码地址如下: http://www.demodashi.com/demo/11653.html 概要 在决定自己封装一个下载器前,我本以为没有那么复杂,可在实际开发过程中困难重重,再加上iOS10和 ...

  2. 基于iOS 10封装的下载器(支持存储读取、断点续传、后台下载、杀死APP重启后的断点续传等功能)

    原文 资源来自:http://www.cocoachina.com/ios/20170316/18901.html 概要 在决定自己封装一个下载器前,我本以为没有那么复杂,可在实际开发过程中困难重重, ...

  3. 基于GMap.NET地图下载器的开发和研究

    基于GMap.NET地图下载器的开发和研究 软件下载地址:https://pan.baidu.com/s/1ay0aOm3fiZ35vlfD8kFYFw 1.地图浏览功能 可以浏览谷歌地图.百度.ar ...

  4. 【CentOS7】在服务器上搭建基于Aria2的离线下载器

    说明   在平时从网上下载文件时,有时会遇到即使一个几十兆的文件都要下一天的困境,如果使用远程服务器先登录ssh,再通过wget.scp的方式下载文件又比较费事.参考网上有人用Aria2搭建离线下载器 ...

  5. 基于ijkplayer封装ffmpeg播放器的录屏实现

    关于ijkplayer我自己提出的issue的https://github.com/Bilibili/ijkplayer/issues/1166的一个小总结,还先不要期望我有完整代码给出,如果只想知道 ...

  6. 基于VLC封装的播放器VlcPlayer,可播放本地及网络视频,支持视频录制。

    VlcPlayer.h文件 #ifndef VlcPlayer_H #define VlcPlayer_H #ifdef _WIN32 #include <basetsd.h> typed ...

  7. java 多线程下载器_Java多线程的下载器(1)

    实现了一个基于Java多线程的下载器,可提供的功能有: 1. 对文件使用多线程下载,并显示每时刻的下载速度. 2. 对多个下载进行管理,包括线程调度,内存管理等. 一:单个文件下载的管理 1. 单文件 ...

  8. python编写下载器可暂停_python多进程断点续传分片下载器

    python多进程断点续传分片下载器 标签:python 下载器 多进程 因为爬虫要用到下载器,但是直接用urllib下载很慢,所以找了很久终于找到一个让我欣喜的下载器.他能够断点续传分片下载,极大提 ...

  9. [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

最新文章

  1. Android - Manifest 文件 详解
  2. OnsenUI 前端框架(三)
  3. iOS 关于第三方键盘
  4. python模块下载过程出错_尝试导入已安装的python模块时收到错误
  5. ok6410 3.0.1内核调用V4L接口出错解决方法(转)
  6. delphi打包python_使用Delphi 编写Python Extension
  7. account表里有什么 银行_模拟一个银行账户类Account,账户类中包括所有者、账号、余额、账户总数、存款、取款等信息。_学小易找答案...
  8. udf提权 udf.php,UDF提权
  9. 【PAT】1009. 说反话 (20)
  10. 操作系统MOOC课后习题答案
  11. 如何在Linux上执行exe文件
  12. Excel如何制作下拉列表
  13. Zooming Slow-Mo: Fast and Accurate One-Stage Space-Time Video Super-Resolution----视频超分辨
  14. 计算机主板上一般带有高速缓冲存储器cache,它是与什么之间的缓存,计算机微机原理与应用(一)...
  15. Implement int sqrt(int x).
  16. 勇于探索,及时总结,拥有自信!个人工作感受总结篇……
  17. Unity3D使用腾讯广点通广告
  18. 初步了解Panda3D 雾(Fog)
  19. Qt获取音频设备信息
  20. Qt扫盲-QMake 使用概述

热门文章

  1. 16岁开宝马,19岁创立自己的电脑公司,戴尔传奇
  2. Spring集成spymemcached
  3. 【NetApp】7mode options选项解释
  4. Hibernate4.x之Session
  5. 【Spring实战】—— 3 使用facotry-method创建单例Bean总结
  6. 神鬼传奇小技巧:教你如何修改自己想要的时装
  7. WebStorm Git 分支操作
  8. 构建虚拟工控环境系列 - 西门子虚拟PLC
  9. 《大道至简》第一章编程的精义伪代码读后感
  10. 批号数量调整单中批次数量和库存数量不一致