unity3d 关于断点下载和整个下载(用于更新)
2015-04-07 13:06
169 查看
using UnityEngine; using System.Collections; using System.IO; using System.Net; using Math= System.Math; using Uri = System.Uri; using Convert= System.Convert; public class DownloadTest : MonoBehaviour { public UILabel label1; public UILabel label2; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnGUI () { if (GUI.Button (new Rect (0, 0, 100, 20), "Download")) { StartCoroutine (downfile ("http://localhost:8888/test.zip", Application.streamingAssetsPath + "/test.zip", label1)); } if (GUI.Button (new Rect (0, 20, 100, 20), "StopDownload")) { StopAllCoroutines (); } if (GUI.Button (new Rect (0, 40, 100, 20), "ResumDownload")) { StartCoroutine (FPointDown ("http://localhost:8888/test.zip", Application.streamingAssetsPath + "/test.zip", label2)); } } string t = ""; //整体下载 IEnumerator downfile (string url, string LocalPath, UILabel DesLable) { Uri u = new Uri (url); HttpWebRequest mRequest = (HttpWebRequest)WebRequest.Create (u); mRequest.Method = "GET"; mRequest.ContentType = "application/x-www-form-urlencoded"; HttpWebResponse wr = (HttpWebResponse)mRequest.GetResponse (); Stream sIn = wr.GetResponseStream (); FileStream fs = new FileStream (LocalPath, FileMode.Create, FileAccess.Write); long length = wr.ContentLength; long i = 0; decimal j = 0; while (i<length) { byte[] buffer = new byte[1024]; i += sIn.Read (buffer, 0, buffer.Length); fs.Write (buffer, 0, buffer.Length); if ((i % 1024) == 0) { j = Math.Round (Convert.ToDecimal ((Convert.ToDouble (i) / Convert.ToDouble (length)) * 100), 4); t = "当前下载文件大小:" + length.ToString () + "字节当前下载大小:" + i + "字节下载进度" + j.ToString () + "%"; DesLable.text = t.ToString (); } else { t = "当前下载文件大小:" + length.ToString () + "字节当前下载大小:" + i + "字节"; DesLable.text = t.ToString (); } yield return false; } sIn.Close (); wr.Close (); fs.Close (); } string downloadString = "已经下载"; //断点下载 IEnumerator FPointDown (string uri, string saveFile, UILabel DesLable) { //打开网络连接 HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create (uri); HttpWebRequest requestGetCount = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create (uri); long countLength = requestGetCount.GetResponse ().ContentLength; //打开上次下载的文件或新建文件 long lStartPos = 0; System.IO.FileStream fs; if (System.IO.File.Exists (saveFile)) { fs = System.IO.File.OpenWrite (saveFile); lStartPos = fs.Length; if (countLength - lStartPos <= 0) { fs.Close (); t = "已经"; DesLable.text = t.ToString (); yield break; } fs.Seek (lStartPos, System.IO.SeekOrigin.Current);//移动文件流中的当前指针 } else { fs = new FileStream (saveFile, FileMode.Create); } if (lStartPos > 0) { request.AddRange ((int)lStartPos);//设置Range值 print (lStartPos); } //向服务器请求,获得服务器回应数据流 Stream ns = request.GetResponse ().GetResponseStream (); int len = 1024 * 8; byte[] nbytes = new byte[len]; int nReadSize = 0; nReadSize = ns.Read (nbytes, 0, len); while (nReadSize>0) { fs.Write (nbytes, 0, nReadSize); nReadSize = ns.Read (nbytes, 0, len); t = downloadString + ":" + fs.Length / 1024 + "kb/" + countLength / 1024 + "kb" + "----" + ((double)fs.Length / countLength).ToString () + "%"; DesLable.text=t; yield return false; } ns.Close (); fs.Close (); //这里放更新安装代码,或者可以测试这个下载的包有没有出错,验证sha和md5 } }
相关文章推荐
- unity3d 关于断点下载和整个下载(用于更新)
- unity3d 关于断点下载和整个下载(用于更新)
- unity3d 关于断点下载和整个下载(用于更新)
- android4.4中关于不能再主线程下载和在主线程中更新UI的矛盾
- 关于ubuntu更新sudo apt-get update和sudo apt-get upgrade下载缓慢的问题
- Android关于后台下载前台通知更新进度条的问题
- 关于《王福朋petshop4.0视频教程》下载的更新
- 关于Visual Assist X(VC助手)几个最新版本的比较与破解下载——更新到10.5.1727.0
- 关于Qt使用QNetworkAccessManager下载文件(实现断点续传功能)
- 关于下载Android源码是无法获取repo和更新Android SDK的错误
- 关于魔兽世界3.0下载了2.64G更新包后仍然提示需要下载4.6G文档的解决方法收藏
- 关于AsyncTask异步下载图片带有进度条更新
- 关于ruby的电子书下载(持续更新2006-12-4)
- Unity3D热更新全书-下载 唯一的一篇
- 关于Android SDK 下载和更新失败解决办法
- unity3d关于天空变换代码下载
- 关于Visual Assist X(VC助手)几个最新版本的比较与破解下载——更新到10.6.1854
- 【原】关于Visual Assist X(VC助手)几个最新版本的比较与破解下载——更新到10.7.1903.0
- 关于Visual Assist X(VC助手)几个最新版本的比较与破解下载——更新到10.5.1738.0
- [转]DX1.5关于帖子查看数及附件下载数延迟更新的详解