using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Net; using System.Net.Http; using System.Threading.Tasks; using ET; using FairyGUI; using UnityEngine; using UnityEngine.Networking; namespace GFGGame { public static class PictureStorageHelper { //获取图片的临时上传地址协议 public static async ETTask ReqTempPictureUrl(int pictureType) { ViewManager.Show("上传中..."); S2C_GetTempPictureUrl response = null; response = (S2C_GetTempPictureUrl)await MessageHelper.SendToServer(new C2S_GetTempPictureUrl() { PictureType = pictureType }); if (response != null) { if (response.Error == ErrorCode.ERR_Success) { return new string[] { response.TempPictureUrl, response.PictureObjectPath }; } } else { ViewManager.Hide(); PromptController.Instance.ShowFloatTextPrompt("获取上传地址失败"); } return null; } //将图片上传到华为云 public static async Task PushToHWCloud(string signUrl, byte[] buffer) { HttpContent content = new ByteArrayContent(buffer); HttpClient httpClient = new HttpClient(new HttpClientHandler() { UseCookies = false }); HttpResponseMessage response = await httpClient.PutAsync(signUrl, content); response.EnsureSuccessStatusCode(); await response.Content.ReadAsStreamAsync(); if (response.StatusCode != HttpStatusCode.OK) { ViewManager.Hide(); PromptController.Instance.ShowFloatTextPrompt("上传资源失败"); return false; } else { return true; } } public static IEnumerator Download(List list, int startIndex, Action callBack = null) { for (int i = startIndex; i < list.Count; i++) { PoemGalleryData data = PoemGalleryDataManager.Instance.GetGalleryDataById(list[i]); if (data.Ntexture != null) continue; int count = 0; yield return DownloadPicture(data, count); } if (callBack != null) callBack(); ET.Log.Debug("Download finish!!!"); } private static IEnumerator DownloadPicture(PoemGalleryData data, int count) { if (count >= 5) { ET.Log.Error("Download fild!!!"); data.Ntexture = null; ViewManager.Hide(); yield return null; } using (UnityWebRequest request = UnityWebRequestTexture.GetTexture(data.PictureTempUrl)) { yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.ProtocolError || request.result == UnityWebRequest.Result.ConnectionError) { PromptController.Instance.ShowFloatTextPrompt("下载失败"); ET.Log.Error("Download fild!!!"); count += 1; yield return DownloadPicture(data, count); } else { Texture2D texture = (request.downloadHandler as DownloadHandlerTexture).texture; data.Ntexture = new NTexture(texture); EventAgent.DispatchEvent(ConstMessage.DOWNLOAD_FINISH_ONE); } } } public static IEnumerator Download(List list) { for (int i = 0; i < list.Count; i++) { PoemPhotoData data = list[i]; if (data == null || data.Ntexture != null) continue; int count = 0; yield return DownloadPicture(data, count); } ET.Log.Debug("Download finish!!!"); EventAgent.DispatchEvent(ConstMessage.DOWNLOAD_FINISH); } private static IEnumerator DownloadPicture(PoemPhotoData data, int count) { if (count >= 5) { ET.Log.Error("Download fild!!!"); data.Ntexture = null; ViewManager.Hide(); yield return null; } using (UnityWebRequest request = UnityWebRequestTexture.GetTexture(data.PictureTempUrl)) { yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.ProtocolError || request.result == UnityWebRequest.Result.ConnectionError) { PromptController.Instance.ShowFloatTextPrompt("下载失败"); count += 1; yield return DownloadPicture(data, count); } else { Texture2D texture = (request.downloadHandler as DownloadHandlerTexture).texture; data.Ntexture = new NTexture(texture); data.Bytes = texture.EncodeToJPG(); } } } } }