Browse Source

提交解决中文图片上传保存的问题

wartheking 4 days ago
parent
commit
95e877a07f
2 changed files with 37 additions and 15 deletions
  1. 20 6
      Assets/Scripts/UI/Item/ObsItem.cs
  2. 17 9
      Assets/Scripts/UI/Tools/ObsPlayerPanel.cs

+ 20 - 6
Assets/Scripts/UI/Item/ObsItem.cs

@@ -40,30 +40,44 @@ public class ObsItem : MonoBehaviour
         {
             nameText.text = _data.name;
         }
-        StartCoroutine(LoadFmTex( ServerAddress.Server_TextureSavePath + _data.targetName + ".jpg"));
+        string hashName = ObsPlayerPanel.GetHashedName(_data.targetName);
+        StartCoroutine(LoadFmTex( ServerAddress.Server_TextureSavePath + hashName + ".jpg"));
+        //Debug.Log(_data.targetName + gameObject.activeSelf);
     }
 
+    private void OnEnable()
+    {
+        if (!havePic && _data != null) {
+           // Debug.Log(_data.targetName);
+            string hashName = ObsPlayerPanel.GetHashedName(_data.targetName);
+            StartCoroutine(LoadFmTex(ServerAddress.Server_TextureSavePath + hashName + ".jpg"));
+        }
+    }
     private void OnGetFmUpdate(string name)
     {
-        if (name.Equals(_data.targetName))
+        if (name.Equals(ObsPlayerPanel.GetHashedName(_data.targetName)))
         {
-            StartCoroutine(LoadFmTex(ServerAddress.Server_TextureSavePath + _data.targetName + ".jpg"));
+            StartCoroutine(LoadFmTex(ServerAddress.Server_TextureSavePath + name + ".jpg"));
         }
     }
-
+    bool havePic = false;
     IEnumerator LoadFmTex(string url)
     {
         UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);
         yield return www.SendWebRequest();
+        string hashName = ObsPlayerPanel.GetHashedName(_data.targetName);
         if (www.isDone && www.result == UnityWebRequest.Result.Success)
         {
             fmImg.texture = ((DownloadHandlerTexture)www.downloadHandler).texture;
-            if(!OBSTexLibrary.ContainsKey(ServerAddress.Server_TextureSavePath + _data.targetName + ".jpg"))
-                OBSTexLibrary.Add(ServerAddress.Server_TextureSavePath + _data.targetName + ".jpg", fmImg.texture);
+            havePic = true;
+            if (!OBSTexLibrary.ContainsKey(ServerAddress.Server_TextureSavePath + hashName + ".jpg"))
+                OBSTexLibrary.Add(ServerAddress.Server_TextureSavePath + hashName + ".jpg", fmImg.texture);
         }
         www.disposeDownloadHandlerOnDispose = true;
         www.Dispose();
     }
+
+    
     
     public void ShowObsTargetObj()
     {

+ 17 - 9
Assets/Scripts/UI/Tools/ObsPlayerPanel.cs

@@ -8,6 +8,7 @@ using DG.Tweening;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
 using UnityEngine;
+using System.Security.Cryptography;
 using RenderHeads.Media.AVProVideo;
 using UnityEngine.Networking;
 using UnityEngine.UI;
@@ -157,17 +158,23 @@ public class ObsPlayerPanel : MonoBehaviour
         }
     }
 
-    public void Close()
+    public static string GetHashedName(string originalName)
     {
-        Debug.Log(openSuccess);
-        if (openSuccess)
+        using (SHA256 sha256 = SHA256.Create())
         {
-            Texture2D saveTex = new Texture2D(704, 576);
-            obsPlayer.ExtractFrame(saveTex);
-            Debug.Log(saveTex.width);
-            Debug.Log(saveTex.height);
-            HttpHelper._Instance.SaveFirstFrame(saveTex.EncodeToJPG(), $"{_targetName}.jpg", _targetName);
+            byte[] hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(originalName));
+            return BitConverter.ToString(hash).Replace("-", "").ToLower();
         }
+    }
+
+
+    public void Close()
+    {
+        Texture2D saveTex = new Texture2D(704, 576);
+        obsPlayer.ExtractFrame(saveTex);
+        string hashName = GetHashedName(_targetName);
+
+        HttpHelper._Instance.SaveFirstFrame(saveTex.EncodeToJPG(), $"{hashName}.jpg", hashName);
         obsPlayer.Control.Stop();
         currentChannelId = "";
         this.gameObject.SetActive(false);
@@ -274,7 +281,8 @@ public class ObsPlayerPanel : MonoBehaviour
     {
         Texture2D saveTex = new Texture2D(704, 576);
         obsPlayer.ExtractFrame(saveTex);
-        StartCoroutine(UpLoadFile(saveTex.EncodeToJPG(), $"{obsName}{GetCurrentUnixTimestampMillis()}.jpg"));
+        string hashName = GetHashedName(obsName);
+        StartCoroutine(UpLoadFile(saveTex.EncodeToJPG(), $"{obsName}_{GetCurrentUnixTimestampMillis()}.jpg"));
     }
     public string ConvertToUnicode(string input)
     {