「Unity」基于UnityWebRequest的HTTP文件断点续传

简介: 此处需要手动开启协程未考虑网络文件变动的问题,需要的话可以自行进行md5比对若需要分片下载,可以通过修改Range相关值实现using System;using System.Collections;using System.

此处需要手动开启协程
未考虑网络文件变动的问题,需要的话可以自行进行md5比对
若需要分片下载,可以通过修改Range相关值实现

using System;
using System.Collections;
using System.IO;
using UnityEngine.Networking;

public class HttpDownLoad
{
public float progress { get; private set; }

public bool isDone { get; private set; }

private bool isStop;

public IEnumerator Start(string url, string filePath, Action callBack)
{
var headRequest = UnityWebRequest.Head(url);

yield return headRequest.SendWebRequest();

var totalLength = long.Parse(headRequest.GetResponseHeader("Content-Length"));

var dirPath = Path.GetDirectoryName(filePath);
if (!Directory.Exists(dirPath))
{
Directory.CreateDirectory(dirPath);
}

using (var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write))
{
var fileLength = fs.Length;

if (fileLength < totalLength)
{
fs.Seek(fileLength, SeekOrigin.Begin);

var request = UnityWebRequest.Get(url);
request.SetRequestHeader("Range", "bytes=" + fileLength + "-" + totalLength);
request.SendWebRequest();

var index = 0;
while (!request.isDone)
{
if (isStop) break;
yield return null;
var buff = request.downloadHandler.data;
if (buff != null)
{
var length = buff.Length - index;
fs.Write(buff, index, length);
index += length;
fileLength += length;

if (fileLength == totalLength)
{
progress = 1f;
}
else
{
progress = fileLength / (float) totalLength;
}
}
}
}
else
{
progress = 1f;
}

fs.Close();
fs.Dispose();
}

if (progress >= 1f)
{
isDone = true;
if (callBack != null)
{
callBack();
}
}
}

public void Stop()
{
isStop = true;
}
}
更多unity2018的功能介绍请到paws3d爪爪学院查找。

相关文章
|
1月前
|
监控 网络安全 C++
Qt 5.14.2 网络编程揭秘:构建高效HTTP客户端与文件下载器
Qt 5.14.2 网络编程揭秘:构建高效HTTP客户端与文件下载器
|
1月前
|
Java 应用服务中间件
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
解决tomcat启动报错:无法在web.xml或使用此应用程序部署的jar文件中解析绝对的url [http:java.sun.com/jsp/jstl/core]
120 1
|
4月前
|
存储 JSON C#
【Unity 3D】C#从JSON文件中读取、解析、保存数据(附源码)
【Unity 3D】C#从JSON文件中读取、解析、保存数据(附源码)
75 0
|
5月前
|
Ubuntu Linux
仓库 “https://mirrors.aliyun.com/docker-ce/linux/ubuntu una Release” 没有 Release 文件
仓库 “https://mirrors.aliyun.com/docker-ce/linux/ubuntu una Release” 没有 Release 文件
171 0
Springboot Http文件的访问 Url 转换 MultipartFile ,File 转 MultipartFile
Springboot Http文件的访问 Url 转换 MultipartFile ,File 转 MultipartFile
623 0
|
10月前
|
存储 缓存 JavaScript
Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件
为了解决调用一些依赖的如echarts等一些js的代码模块引入的问题,就需要静态文件了。 本篇解说StaticFileController,在返回的html文本中调用外部js文件,类似的,其他文件都是一样了,只是引入的后缀名不一样。
Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件
|
JavaScript 前端开发 Java
Java http Post下载Excel文件 xxx.xlsx 失败解决,及传输文件类型ContentType对应关系
查询数据库生成Excel下载功能。本来很简单的功能却搞了挺久的,主要因为下载的文件打不开,且此功能已是基本功能。这里记录下来方便后面查阅。 ContentType对应的文件关系查看下面连接 https://www.runoob.com/http/mime-types.html
210 0
|
前端开发 JavaScript 应用服务中间件
js/css文件加载失败 HTTP code状态码返回206 Partial Content
js/css文件加载失败 HTTP code状态码返回206 Partial Content
583 0
npm : 无法加载文件 D:\soft\codeProcess\node\node_global\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.micr +
npm : 无法加载文件 D:\soft\codeProcess\node\node_global\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.micr +
npm : 无法加载文件 D:\soft\codeProcess\node\node_global\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.micr +
|
XML 存储 网络协议
【Android】使用Android开发应用过程中遇到ViewGroup的简单效以及aw和assets文件夹下的文件(Http协议的底层工作)
【Android】使用Android开发应用过程中遇到ViewGroup的简单效以及aw和assets文件夹下的文件(Http协议的底层工作)
130 0
【Android】使用Android开发应用过程中遇到ViewGroup的简单效以及aw和assets文件夹下的文件(Http协议的底层工作)