一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

前言

1.测试下载音乐可以到。 https://www.ytmp3.cn/p/78312.html 网站下面下载

2.最近做音乐播放器,下载音乐的时候遇到一个问题,网络很卡的时候下载mp3音乐,下载途中出现request time out。然后就下载不了的。不知道怎么重新链接继续下载,刚开始的时候使用Alamofire的拦截器重新激活下载,发现重新下载,这样不行,最好就是继续下载,后来使用断点续传可以断开网络后,等待回复,也可以回复继续下载。

下面写的内容不是很完善,不过怕忘记还是记录一下先,有空再优化。

在开始讲之前,先说一下怎么去哪下载的资源进行测试,大家可以使用谷歌浏览器,上网查一个下载的资源进行下载,在下载过程中可以点击,看下面的图片。

就这样下载地址就能够进行测试了。

正题

Alamofire 5.4.4 下载文件

下面方法的缺点:下载文件过大网络断开会下载失败。但是又不能继续原来的基础上下载

Alamofire下载文件源码


使用这个下载的方法如果网络顺畅还好,如果网络卡的情况下载如果出现链接超时就会下载失败。
就算设置延长超时时间没什么用。

AF.sessionConfiguration.timeoutIntervalForRequest = 3600

Alamofire 拦截器(重新下载)

下面方法的缺点:下载文件过大网络断开会下载失败。但是又不能继续原来的基础上下载。

拦截器用于获取数据还可以,如果数据获取失败可以重复试多几次,但是用于下载大文件还是不行的。

后来上网查找了一下,以为Alamofire请求有一个拦截器的,当链接失败的时候,可以使用拦截器进行拦截,然后重新下载。



但是会出现一个问题,就算重新链接成功之后会重新下载,就只以前断开钱的记录没有了,需要重新下载,这样的话,如果没人下载的途中断开,又重新下载,变成一个死循环,永远都下载不成功。

最后解决办法还是用原声的断点续传…

断点续传

断点续传源码

断点续传源码Demol说明:该断点续传下载过程中的文件路径是tmp文件夹里面的,下载完成之后它是在tmp文件夹里面的, 我们下载成功之后可以自己创建一个文件夹,然后命名好文件的名称。文件格式也是需要我们自己新建的,然后把tmp文件夹里面的文件移动到自己新建的文件夹里面,然后就删除tmp的文件。

断点续传使用的是原生的URLSession来实现,可以实现开始下载,停止下载,再次下载会在上一次的基础上继续下载。如果下载中出现错误,可以保存下载的内容,然后重新尝试再次链接继续下载。

他可以做一个开始下载按键,停止下载按键,URLSession提供API可以控制下载。

下面说一下核心的代码:
1.下载过程中如果出现问题可以尝试重新链接下载路径继续下载

2.可以下载过程中停止下载

3.然后点击开始按键继续下载

断点续传下载(60秒后判断断开自动继续链接下载)源码
如果一旦下载失败,在错误的回调里面拿到下载的数据,我们可以重新点击开始按键继续下载,利用这一点我们可以,封装一个方法,定时60秒检测一次下载是否断开,如果断开就继续下载,直到下载完毕。

然后再封装成一个下载方法,通过闭包返回下载进度,下载成功之后的二进制数据,和失败的信息回调。

使用AFN 下载文件

AFURLSessionManager

AFURLSessionManager源码链接

用AFN下载可以用AFURLSessionManager的类创建对象进行下载。

下面图片的方法是在AFN的基础上再封装多一层,然后外面调用这个方法直接传递URL就能够下载。


使用:

下面图片是下载的效果试过没有问题:

AFHTTPSessionManager

AFHTTPSessionManager源码地址

AFN还可以用AFHTTPSessionManager类创建对象进行下载

使用:

下面图片是下载的效果试过没有问题

OC/Swift 技术 下载文件(断点续传 AFN下载文件 Alamofire下载文件 原生下载)(源码)相关推荐

  1. [共享]一个文件上传的控件,绝对是精品源码

    [共享]一个文件上传的控件,绝对是精品源码 前段时候在www.codeproject.com上看到一个文件上传的控件,觉得很好,共享给园子里的朋友. 原文链接:http://www.codeproje ...

  2. 响应式瀑布流布局新闻资讯技术博客织梦模板/DedeCMS自适应手机版游戏新闻网站源码下载

    响应式瀑布流布局新闻资讯技术博客织梦模板,DedeCMS自适应手机版游戏新闻网站源码下载.本套织梦模板采用织梦最新内核开发的模板,这款模板使用范围广,不仅仅局限于一类型的企业,游戏新闻.游戏博客类的网 ...

  3. 云知梦php资源下载,云知梦php全站工程师含有每节课源码及php手册

    云知梦php全站工程师含有每节课源码及php手册 视频清晰无水印 1.php环境搭建 2.php变量使用 3.php变量测试和变量转换 4.php常用运算符 5.php流程控制 6.php流程控制与函 ...

  4. 下载MNIST数据集并使用python将数据转换成NumPy数组(源码解析)

    下载MNIST数据集并使用python将数据转换成NumPy数组 首先来分析init_mnist函数 接下来继续分析load_mnist函数 实现数据集转换的python脚本的代码 显示MNIST图像 ...

  5. OC 技术 原生地图(源码)

    一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹.靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希 ...

  6. Ubuntu 16.04 下载、编译 友善之臂NanoPC-T2的Android5.1.1源码

    友善之臂官网: http://www.arm9.net 友善之臂NanoPC-T2维基使用手册链接: http://wiki.friendlyarm.com/wiki/index.php/NanoPC ...

  7. android 6.0.1原生系统源码下载以及源码编译----framework修改

    1.源码下载前参数配置 1️⃣配置usb所需 sudo apt-get update sudo apt-get install git-core gnupg flex bison gperf buil ...

  8. java游戏下载象棋暗棋_JS小游戏之象棋暗棋源码详解

    本文实例讲述了JS小游戏的象棋暗棋源码,分享给大家供大家参考.具体如下: 游戏运行后如下图所示: Javascript 部分: /** chinese chess * Author: fdipzone ...

  9. 微信小程序--多张图片下载问题--for循环出现 漏下,乱序。最多下载5张图片的问题解决(附带个人开发小程序源码)

    微信小程序多图下载,之前肯定对单张图片下载了解了.这里就不再多说. 首先,多图下载肯定是用到循环了.那么问题就出在循环这里.在循环里调用单图下载方法.这样就会出现一个问题,就是下载时先遍历完了,然后再 ...

最新文章

  1. Python之初识函数(Day11)
  2. js中的SetTimeOut
  3. Docker 学习资料汇总
  4. 【计算机系统结构】第一周 课上笔记
  5. 【软件开发底层知识修炼】十二 C/C++语言中内嵌汇编语言(asm)
  6. 元素位置互换之移位算法
  7. JS实现自动填写问卷【JS小工具】
  8. Python&Opencv手势识别系统(完整源码&自定义UI操作界面&视频教程)
  9. Python自省机制
  10. 联盟链步入黄金时代 |链捕手
  11. 用 Python 制作商品历史价格查询,别踩坑!
  12. LC-3 子程序调用与模拟栈调用递归函数
  13. 科研小白如何做好科研(内附一些科研实用工具)
  14. Qt: 读取/写入文本文件内容
  15. 巨型机是一种什么的超级计算机,把计算机分为巨型机、大中型机按照什么分的...
  16. 关于ArcGIS和PostGIS
  17. 2011年成都信息工程学院第二季极客大挑战逆向第三题Game破文
  18. 开关电源-TL431与光耦组成的电压反馈电路-TL431工作过程分析
  19. 使用Conda Pack打包Python独立运行时环境
  20. PHP设计模式系列 - 单例

热门文章

  1. 登录拦截 安全卫士 vue
  2. 【信息查询的官方网站】
  3. 【CEDEC 2015】【夏日课堂】制作事宜技术篇,新手职员挑战VR Demo开发的真相
  4. oracle11g新建实例,oracle11gRMAN的catalog的创建和使用
  5. 企业私域流量电商运营规划方案计划表
  6. 数学建模竞赛中的符号说明三线表-Texstudio运行结果及LaTeX代码
  7. 清除浏览器input自带黄色(各种颜色)背景
  8. linux命令之scp命令
  9. jQuery中的append()和appendTo()
  10. 粗略整理IOS招聘要求