首页 > 其他分享 >unity文件下载HttpWebRequest

unity文件下载HttpWebRequest

时间:2023-08-17 10:44:27浏览次数:32  
标签:url request private unity HttpWebRequest public 下载

/// <summary>
/// 下载进度
/// </summary>
public float Progress
{
get;
private set;
}
/// <summary>
/// 下载状态
/// </summary>
public int Status
{
get;
private set;
}
/// <summary>
/// 错误信息
/// </summary>
public string Error
{
get;
set;
}
/// <summary>
/// 总长度
/// </summary>
public long TotalLength
{
get;
private set;
}
/// <summary>
/// 保存路径
/// </summary>
private string savePath;
/// <summary>
/// url地址
/// </summary>
private string url;
/// <summary>
/// 超出时间
/// </summary>
private int timeOut;
/// <summary>
/// 子线程
/// </summary>
private Thread thread;
/// <summary>
/// 子线程是否停止
/// </summary>
private bool isStop;

/// <summary>
/// 构造函数 Http下载
/// </summary>
/// <param name="url">url地址</param>
/// <param name="timeout">超时时间</param>
/// <param name="callback">回调函数</param>
public DownLoadExcel(string url, string savePath, int timeout)
{
this.savePath = savePath;
this.url = url;
this.timeOut = timeout;
}
/// <summary>
/// 开启下载
/// </summary>
public void DownLoad()
{
// 开启线程下载
thread = new Thread(StartDownLoad);
thread.IsBackground = true;
thread.Start();
Debug.Log("开始下载");
}
/// <summary>
/// 开始下载
/// </summary>
private void StartDownLoad()
{
try
{
// 构建文件流
FileStream fs = new FileStream(this.savePath, FileMode.OpenOrCreate, FileAccess.Write);
// 文件当前长度
long fileLength = fs.Length;
// 文件总长度
TotalLength = GetDownLoadFileSize();
Debug.LogFormat("fileLen:{0}", TotalLength);
if (fileLength < TotalLength)
{
// 没有下载完成
fs.Seek(fileLength, SeekOrigin.Begin);
// 发送请求开始下载
HttpWebRequest request = WebRequest.Create(this.url) as HttpWebRequest;
request.AddRange((int)fileLength);
request.Timeout = this.timeOut;
// 读取文件内容
Stream stream = request.GetResponse().GetResponseStream();
if (stream.CanTimeout)
{
stream.ReadTimeout = this.timeOut;
}
byte[] buff = new byte[4096];
int len = -1;
while ((len = stream.Read(buff, 0, buff.Length)) > 0)
{
if (isStop)
{
break;
}
fs.Write(buff, 0, len);
fileLength += len;
Progress = fileLength * 1.0f / TotalLength;
}
stream.Close();
stream.Dispose();
}
else
{
Progress = 1;
}
fs.Close();
fs.Dispose();
// 标记下载完成
if (Progress == 1)
{
Status = 1;
}
}
catch (Exception e)
{
Error = e.Message;
Status = -1;
}
}
/// <summary>
/// 获取下载的文件大小
/// </summary>
/// <returns>文件大小</returns>
public long GetDownLoadFileSize()
{
HttpWebRequest request = WebRequest.Create(this.url) as HttpWebRequest;
request.Method = "HEAD";
request.Timeout = this.timeOut;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
return response.ContentLength;
}
/// <summary>
/// 关闭下载
/// </summary>
public void Close()
{
this.isStop = true;
}

标签:url,request,private,unity,HttpWebRequest,public,下载
From: https://www.cnblogs.com/TriggerF/p/17636982.html

相关文章

  • Unity之如何计算实时帧率
    代码如下:usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassCalcFPSTool:MonoBehaviour{privatefloatm_UpdateInterval,m_FPS;floatUpdateInterval{set=>m_UpdateInterval=Mathf.Cla......
  • Unity 编辑器资源导入处理函数 OnPreprocessTexture:深入解析与实用案例
    Unity编辑器资源导入处理函数OnPreprocessTexture用法点击封面跳转下载页面简介在Unity中,我们可以使用编辑器资源导入处理函数(OnPreprocessTexture)来自定义处理纹理资源的导入过程。这个函数是继承自AssetPostprocessor类的,通过重写这个函数,我们可以在纹理资源导入之前......
  • 重磅发布 |《汽车制造业文件外发数据防泄漏白皮书》免费下载!
    汽车制造业企业数据外发需求频繁,对很多车企来说,不仅有与异地研发机构间、供应商之间的协同研发文件交换,还有与外包供应商及零部件供应商之间的基于价值链的协同关系,这就导致车企需要对外与不同类型企业、组织,进行不同业务需求下的、不同类别的文件交换。传统的文件交换方式会存在......
  • Unity学习笔记------------------unity快捷键
    Unity常用快捷键Q平移场景视图W移动E旋转R缩放FF场景视图聚焦选定物体Z以轴点/中心旋转X全局坐标/局部坐标Ctrl/Cmd+P播放或停止Ctrl/Cmd+Shift+P暂停或恢复Ctrl/Cmd+Shift+B打开BulidSetting窗口Ctrl/Cmd+B发布并运行Ctrl/Cmd+Shift+......
  • Linux专栏(一):VMware的下载与安装
    文章目录1背景2下载VMware虚拟机1背景想要学习Linux系统但又不想经历安装双系统复杂的操作,可以试试虚拟机方案。只是虚拟机方案不可以调用GPU就非常的无语,作为初学者学习还是非常不错的!注意:倘若真正转入Linux系统,安装双系统或者单Linux才是完美解决方案✿✿ヽ(°▽°)ノ✿2下......
  • 前端vue使用blob下载流文件
    请求后端接口,发现返回的是这么一堆东西 代码:axios:exportfunctionexportEcoCarAppoint(params){returnHttp({url:'/api/jsis/ecoCarAppoint/exportEcoCarAppoint',method:'POST',data:params,responseType:'blob',//设置响应......
  • Unity相关学习
    实现C#委托/事件声明的委托与时间&通知者执行的方法参数类型要匹配参数声明要继承EventArgsusingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceConsoleApplication1{//声明一个委托publicdelegatevoidTimeEventHandler(objecto......
  • Unity-unity导出gltf模型
    1.首先是用这个获取源码gitclonehttps://github.com/KhronosGroup/UnityGLTF.git2.打开项目之后,选择Samples下面的一个场景,在Console有超多的错误信息。3.编译GLTFSerialization,最后生成的dll库放在了UnityGLTF\UnityGLTF\Assets\UnityGLTF\Runtime\Plugins目录下了;Tests引......
  • Unity UGUI的InputField(输入框)组件的介绍及使用
    UGUI的InputField(输入框)组件的介绍及使用1.什么是UGUI的InputField组件?UGUI的InputField组件是Unity中的一个用户界面组件,用于接收用户的输入。它可以用于创建文本输入框、密码输入框等功能。2.UGUI的InputField组件的工作原理UGUI的InputField组件通过监听用户的输入事件,用......
  • an软件-中文版An下载 Adobe Animate 2022安装激活步骤
    AdobeAnimateCC2017是由原AdobeFlashProfessionalCC更名得来,简写为“AnCC2017”。AdobeAnimateCC2017是新型的HTML动画编辑软件,支持简体中文,并且新增了全新功能,支持HTML5,和摄像头、创建管理笔画等,让网页设计人员轻松制作网页,在输出格式方面也非常的灵活,欢迎各位来华军软......