/// <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; }
/// <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; }