本文将运用UnityWebRequest来进行文件的断点下载。

断点下载顾名思义,就是在程序退出或者暂定下载把已经下载好的数据存储起来,在下一次下载时接着上一次开始下载,不需要重新下载,既节省时间又节省流量。

本文关键语句:

            //创建网络请求UnityWebRequest unityWeb = UnityWebRequest.Get(downPath);//设置开始下载文件从什么位置开始unityWeb.SetRequestHeader("Range", "bytes=" + length + "-");//这句很重要

目前我的需求是下载的文件大小,下载时的进度,因为UnityWebRequest没有返回下载文件的大小,下载文件的进度(有返回进度但是返回的是0-1之间的小数 我们这想要的是从上次已下好的文件与现在开始的进度 比如:我上次下载了50% 我这次就应该从50%开始 ,UnityWebRequest给的进度还是从0%开始到100%所以我们继承unity给的 DownloadHandler类来存储下载信息)

下面是DownloadFileHandler类的基本属性与字段。

        /// <summary>/// 文件总长度/// </summary>private int sumLength;public int SumLength{get { return sumLength; }}/// <summary>/// 已下载长度/// </summary>private int nowLength;/// <summary>/// 下载进度/// </summary>public float DownloadProgress{get{if (sumLength== 0)return 0f;elsereturn (float)nowLength/ sumLength;}}

接下来是需要重写DownloadHandler中的方法

ReceiveContentLength(int contentLength) 返回的参数为下载文件的总长度 (以字节未单位)

【contentLength这个参数注意了 返回文件未下载的长度 故: 需要加上本地保存的文件长度才是整个下载文件的长度。】

 protected override void ReceiveContentLength(int contentLength){//这里真坑  断点下载 下次获取的是未下载的长度 需要加上本地已经下载的长度 才是整个文件 的总长度sumLength = contentLength + nowLength;}

ReceiveData(byte[] data, int dataLength)  下载中每次都调用 data参数为当前下载的数据它还包含前面下载的数据  dataLength参数为当前下载的数据长度。 每次我们要的数据就是data的索引从0开始到索引dataLength-1之间的数据

protected override bool ReceiveData(byte[] data, int dataLength)
{ //在这里我们就可以实现把下载的数据保存在本地文件            nowLength += dataLength;WriteFile(pathName, data, dataLength);return true;
}

还有一个重要的方法 CompleteContent() 下载完成时调用,在这个方法中可以把下载完成保存的临时文件修改成下载时的文件名。

扩展一个需求,在不下载的情况下获取到下载文件的大小这个在源码中会有。

源码地址UnityWebRequest断点下载源码 提取码:bsck

谢谢各位阅读我的文章,希望能给你们带来帮助,有不足之处请提出,大家共同进步。

UnityWebRequest断点下载文件相关推荐

  1. Python编程:多线程断点下载文件

    一.前言 大多数网站为了服务器宽带均衡使用,会限制单个连接的传输速度.有时需要下载几百MB大小文件,但下载速度只有100~200KB/S的时候,可以采用python开多线程流式下载该文件以加快下载速度 ...

  2. Java 多线程断点下载文件_详解

    本文转载于:http://blog.csdn.net/ibm_hoojo/article/details/6838222 基本原理:利用URLConnection获取要下载文件的长度.头部等相关信息, ...

  3. python多线程下载大文件_Python threading多线程断点下载文件的方法

    这是玩蛇网一篇关于Python多线程下载文件方法的代码实例.文中应用到的python模块和方法有httplib.Python urllib2.Python threading多线程模块.python ...

  4. java 多线程下载 断点_Java 多线程断点下载文件

    基起原根蒂根基理:哄骗URLConnection获取要下载文件的长度.头部等相干信息,并设置响应的头部信息.并且经由过程URLConnection获取输入流,将文件分成指定的块,每一块零丁开辟一个线程 ...

  5. U3d—通过CRL下载文件并保存本地___#三分有点码#专栏

    U3d-通过CRL下载文件并保存本地三分有点码. void Start(){string path = Application.persistentDataPath + "/" + ...

  6. ftp上传下载文件详解

    首先导入包 import org.apache.commons.NET.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; FTPCli ...

  7. iOS网络-NSURLSessionDataTask大文件离线断点下载

    什么叫离线断点下载,就是用户下载中关闭程序重新打开可以继续下载 代码实现如下: #import "ViewController.h" @interface ViewControll ...

  8. 多线程断点下载开发总结(二)- 多线程写文件

    2019独角兽企业重金招聘Python工程师标准>>> 上篇文章提到了向服务器请求部分数据,已达到多线程下载的目的. 这里我们看看如何实现多线程写入文件.先看示例代码: String ...

  9. 使用NSURLConnection实现大文件断点下载

    使用NSURLConnection实现大文件断点下载 由于是实现大文件的断点下载,不是下载一般图片什么的.在设计这个类的时候本身就不会考虑把下载的文件缓存到内存中,而是直接写到文件系统. 要实现断点下 ...

最新文章

  1. python小数据池,代码块的最详细、深入剖析
  2. python模拟行星运动_使用 Python 来简单的动态模拟一下太阳系的运转
  3. ECS Windows系统使用自带监视器查看IIS并发连接数
  4. 数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器(转)...
  5. mysql 小数转换成百分数查出(保留两位小数百分数)
  6. RxSwift 5官方Demo调试和学习资源
  7. PWM驱动sg90电机
  8. 音视频开发---音视频同步算法
  9. 电影院移动端电影分区发行致力于开拓海外市场
  10. centos7.X系统初始化脚本
  11. HDU 2014 青年歌手大奖赛_评委会打分
  12. SRS(简单实时视频服务) 笔记(3)- 配置文件和Http回调
  13. 第七章——数据库设计
  14. Flink使用connect实现双流join全外连接
  15. jsp+ssm计算机毕业设计网上鞋店管理系统【附源码】
  16. 报税系统服务器地址怎么填,报税上海服务器地址
  17. 入行物联网8年后的自白,机智云系“物联网创业者”的希望承载者
  18. 2020-2021学年第二学期期末考试《税法》大作业
  19. 关于GAC全局程序集缓存
  20. 网易考拉静态首页练习总结

热门文章

  1. Linux下载文件命令wget的一些用法
  2. Adobe acrobat 获得PDF高清截图的两种方法(翻译外文用)
  3. 东北大学软件项目管理与过程改进复习提纲(2020)——中英文对照表(按首字母排序)
  4. 互联网行业常用数据分析指标
  5. 计算机操作系统(第四版)
  6. EGO游戏 トキの戦華 时之战华 剧情攻略(+修改器+特殊码)
  7. 莫烦Python[基础教程]
  8. node mysql同步_一些nodejs实现同步操作想法实现
  9. 易语言 超简单的可视化窗口编程语言
  10. adfs服务器获取信息失败,在使用Fiddler或其他诊断工具时无法登陆到ADFS服务器