「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爪爪学院查找。

相关文章
|
5月前
Netty实战: HTTP文件列表服务器
Netty实战: HTTP文件列表服务器
59 0
|
5月前
|
Ubuntu Linux 时序数据库
|
2月前
|
机器学习/深度学习 Ubuntu Linux
在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中?
在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中?
|
3月前
|
网络协议 Python
Python实现HTTP 传输的断点续传机制
使用Python `requests`库实现HTTP断点续传下载大文件,通过设置`Range`头部从上次中断的位置开始继续下载。示例代码展示了一个名为`resume_download`的函数,它接收URL、文件名和最后字节位置参数,以追加方式打开文件并逐块写入内容。要启用HTTP长连接,可添加`Connection: keep-alive`到请求头。
108 0
|
4月前
|
JavaScript
vue : 无法加载文件 D:\module\npm_module\npm_modules\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.c
vue : 无法加载文件 D:\module\npm_module\npm_modules\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.c
|
4月前
|
存储 运维 Serverless
Serverless 使用OOS将http文件转存到对象存储
阿里云OOS提供了一种高效、灵活的解决方案,用于自动化HTTP文件到对象存储的转存。通过OOS,用户可以使用函数计算FC执行Python脚本,直接将文件从HTTP源转移到OSS,无需本地存储或额外ECS实例,降低了成本,提高了效率,并减少了错误。实践步骤包括创建OOS模板并在FC上运行。使用此功能需开通FC服务,创建RAM角色并授权访问OSS。附录中提供了示例模板和Python脚本说明。
|
4月前
|
JavaScript 前端开发 C#
初识Unity——创建代码、场景以及五个常用面板(创建C#代码、打开代码文件、场景的创建、Project、Hierarchy、Inspector、Scene、Game )
初识Unity——创建代码、场景以及五个常用面板(创建C#代码、打开代码文件、场景的创建、Project、Hierarchy、Inspector、Scene、Game )
109 0
|
4月前
|
存储 缓存 开发工具
初识Unity——unity的安装以及工程介绍(安装unity hub、版本选择、中文设置、安装编辑器、Assets文件、Library 文件、[ProjectName].sln 文件)
初识Unity——unity的安装以及工程介绍(安装unity hub、版本选择、中文设置、安装编辑器、Assets文件、Library 文件、[ProjectName].sln 文件)
1053 0
|
5月前
|
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]
1086 1
|
5月前
|
监控 网络安全 C++
Qt 5.14.2 网络编程揭秘:构建高效HTTP客户端与文件下载器
Qt 5.14.2 网络编程揭秘:构建高效HTTP客户端与文件下载器
372 0

热门文章

最新文章