public HttpStatusCode Download(int ModelId, string strDownloadPath, onProgress _onProgress) { if (!Directory.Exists(Path.GetDirectoryName(strDownloadPath))) { return(HttpStatusCode.BadRequest); } Model file = this.Get(ModelId); int filesize = Convert.ToInt32(file.Size); string download_url = this.GetDownloadURL(ModelId); try { HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(download_url); Request.Method = "GET"; Request.AllowAutoRedirect = true; HttpWebResponse Response = (HttpWebResponse)Request.GetResponse(); using (Stream ResponseStream = Response.GetResponseStream()) { using (FileStream fs = new FileStream(strDownloadPath, FileMode.OpenOrCreate, FileAccess.Write)) { int current = 0; float percentage = 0; int chunkSize = 1024 * 1024; byte[] buffer = new byte[chunkSize]; int BytesRead; while ((BytesRead = ResponseStream.Read(buffer, 0, chunkSize)) > 0) { fs.Write(buffer, 0, BytesRead); current += BytesRead; percentage = (float)(Math.Round((double)current / (double)filesize, 4) * 100); if (_onProgress != null) { _onProgress(percentage); } } } } return(Response.StatusCode); } catch (Exception ee) { throw ee; } }
/// <summary> /// 开始热更 /// </summary> public void Go( onProgress OnProgress, onComplate OnComplate, onUpgradeApp OnUpgradeApp, onNetError OnNetError ) { if (m_CurrContext != null) { return; //正在工作时不允许启动第二个工作协程 } m_CurrContext = new context(); m_CurrContext.m_State = STATE.doing; m_CurrContext.m_OnProgress = OnProgress; m_CurrContext.m_OnComplate = OnComplate; m_CurrContext.m_OnNetError = OnNetError; m_CurrContext.m_OnUpgradeApp = OnUpgradeApp; StartCoroutine(coGo(m_CurrContext)); }