/// <summary> /// 下载文件 /// </summary> /// <param name="fileName"></param> /// <param name="fileMode">Append为断点续传,Create为新建文件</param> /// <param name="remoteFileSize">Append模式下必传,远端文件大小</param> /// <param name="remoteLastModified">Append模式下必传,远端文件最后修改日期</param> /// <returns></returns> public static IEnumerator DownloadFile(string fileName, OnDownloadFileFinished onDownloadFileFinidhed, FileMode fileMode = FileMode.Create, long remoteFileSize = 0, DateTime remoteLastModified = new DateTime()) { string url = BaseDownloadingURL + fileName; string filePath = Path.Combine(AssetBundleUtility.LocalAssetBundlePath, fileName); using (UnityWebRequest request = new UnityWebRequest(url, UnityWebRequest.kHttpVerbGET)) { if (File.Exists(filePath) && fileMode == FileMode.Append) { FileInfo localFileInfo = new FileInfo(filePath); bool isOutdate = remoteLastModified > localFileInfo.LastWriteTime; if(localFileInfo.Length == remoteFileSize && !isOutdate)//已下载完成 { onDownloadFileFinidhed(fileName, null); yield break; } if (localFileInfo.Length < remoteFileSize && !isOutdate)//继续下载 { request.downloadHandler = new DownloadHandlerFile(filePath, FileMode.Append); request.SetRequestHeader("Range", string.Format("bytes={0}-", localFileInfo.Length)); } else//重新下载 { request.downloadHandler = new DownloadHandlerFile(filePath); } } else { request.downloadHandler = new DownloadHandlerFile(filePath); } CurrentRequest = request; yield return request.Send(); string error = request.isError ? string.Format("DownloadFile Failed - url: {0}, responseCode: {1}, error: {2}", url, request.responseCode, request.error) : null; onDownloadFileFinidhed(fileName, error); } CurrentRequest = null; }
static IEnumerator UploadDonation(UnityWebRequest webRequest, Action onDataReceived) { if(webRequest == null) yield break; yield return webRequest.Send(); if(webRequest.isError) { Debug.Log(webRequest.error); } else { Debug.Log("Upload donation, WebRequest " + webRequest.url + " done!"); if(onDataReceived != null) onDataReceived(); } }
IEnumerator LoadManifestFromWebRequest() { var url = GetManifestURL(); var www = new UnityWebRequest(url) { downloadHandler = new DownloadHandlerAssetBundle(url, 0) }; yield return www.Send(); var assetBundle = ((DownloadHandlerAssetBundle)(www.downloadHandler)).assetBundle; var assets = assetBundle.LoadAllAssets(); AddLoadedBundleToManager(assetBundle, assets[0].name); manifest = (AssetBundleManifest)assets[0]; }
static IEnumerator PerformWebRequest(UnityWebRequest webRequest, Action<UnityWebRequest> onDataReceived = null) { if(webRequest == null) yield break; yield return webRequest.Send(); if(webRequest.isError) { Debug.Log(webRequest.error); } else { Debug.Log("WebRequest " + webRequest.url + " done!"); if(onDataReceived != null) onDataReceived(webRequest); } }
private IEnumerator ProcessRequest(UnityWebRequest req) { yield return req.Send(); if (req.isError) { if (!WasAborted) { string errorMessage = "Failed web request: " + req.error; Common.Log(errorMessage); self.FinishWithRequest(this, new HttpResponse(new Exception(errorMessage))); } } else { // Extracts asset bundle HttpResponse response = new HttpResponse(); response.Body = Request.downloadHandler.data; response.StatusCode = (int)Request.responseCode; foreach (var pair in Request.GetResponseHeaders()) { response.Headers[pair.Key] = pair.Value; } LogResponse(response); self.FinishWithRequest(this, response); } }