#define _USE_FUNCATION_TEST_ON using BestHTTP; using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Security.Cryptography; using System.Text; using Thousandto.Code.Center; using UnityEditor; using UnityEngine; using UnityEngine.Networking; using XLua; namespace Assets.Editor.DIY.Test { /// <summary> /// 测试工具 /// </summary> public class TestToolEditor : EditorWindow { [MenuItem("Funcell/MiniEasyTools/功能自测工具")] static void Init() { var win = (TestToolEditor)EditorWindow.GetWindow(typeof(TestToolEditor)); win.titleContent = new GUIContent("功能自测面板"); win.Show(); } [MenuItem("Funcell/MiniEasyTools/临时处理")] static void AAA() { var bytes = System.Text.Encoding.UTF8.GetBytes("这是一个测试222222!!"); HTTPRequest w = new HTTPRequest(new System.Uri("https://hangzhou-tzj.oss-cn-hangzhou.aliyuncs.com/unity.txt"), HTTPMethods.Put,delegate(HTTPRequest originalRequest, HTTPResponse response) { Debug.LogError("上传完毕:" + response.StatusCode + "::" + response.Message); }); Dictionary<string, string> headers = new Dictionary<string, string>(); headers["Content-Type"] = "text/plain"; headers["Content-Length"] = bytes.Length.ToString(); headers["Date"] = DateTime.Now.ToUniversalTime().ToString("ddd, dd MMM yyyy HH:mm:ss \\G\\M\\T", CultureInfo.InvariantCulture); var accessKeyId = "LTAI5tA7oGzkJJhTABJTQqrV"; var accessKeySecret = "NO0EOn6y2nJ0zpIdwROXKs1jTR0seF"; var httpMethod = "PUT"; // Because the resource path to is different from the one in the request uri, // can't use ServiceRequest.ResourcePath here. var resourcePath = CreateSigner("hangzhou-tzj", "unity.txt"); var canonicalString = BuildCanonicalString(httpMethod, resourcePath, headers); var signature = ComputeSignatureCore(accessKeySecret, canonicalString); // request could be retried and the Authorization header may exist already. // Fix for #OSS-1579/11349300 headers["Authorization"] = "OSS " + accessKeyId + ":" + signature; foreach (var key in headers.Keys) { Debug.LogError("设置请求的头::" + key+":::"+headers[key]); w.AddHeader(key, headers[key]); } w.UploadStream = new MemoryStream(bytes); w.Send(); } private static string CreateSigner(string bucket, string key) { var resourcePath = "/" + (bucket ?? string.Empty) + ((key != null ? "/" + key : "")); // Hacked. the sign path is /bucket/key for two-level-domain mode // but /bucket/key/ for the three-level-domain mode. if (bucket != null && key == null) { resourcePath = resourcePath + "/"; } return resourcePath; } private const string NewLineMarker = "\n"; public static string BuildCanonicalString(string method, string resourcePath, Dictionary<string, string> headers) { var canonicalString = new StringBuilder(); canonicalString.Append(method).Append(NewLineMarker); IDictionary<string, string> headersToSign = new Dictionary<string, string>(); if (headers != null) { foreach (var header in headers) { var lowerKey = header.Key.ToLowerInvariant(); if (lowerKey == "Content-Type".ToLowerInvariant() || lowerKey == "Content - MD5".ToLowerInvariant() || lowerKey == "Date".ToLowerInvariant()) { headersToSign.Add(lowerKey, header.Value); } } } if (!headersToSign.ContainsKey("Content-Type".ToLowerInvariant())) headersToSign.Add("Content-Type".ToLowerInvariant(), ""); if (!headersToSign.ContainsKey("Content - MD5".ToLowerInvariant())) headersToSign.Add("Content - MD5".ToLowerInvariant(), ""); // Add all headers to sign into canonical string, // note that these headers should be ordered before adding. var sortedHeaders = new List<string>(headersToSign.Keys); sortedHeaders.Sort(new KeyComparer()); foreach (var key in sortedHeaders) { var value = headersToSign[key]; canonicalString.Append(value); canonicalString.Append(NewLineMarker); } // Add canonical resource canonicalString.Append(resourcePath); return canonicalString.ToString(); } public static string ComputeSignatureCore(string key, string data) { Debug.Assert(!string.IsNullOrEmpty(data)); using (var algorithm = KeyedHashAlgorithm.Create("HmacSHA1")) { algorithm.Key = Encoding.UTF8.GetBytes(key.ToCharArray()); return System.Convert.ToBase64String( algorithm.ComputeHash(Encoding.UTF8.GetBytes(data.ToCharArray()))); } } private class KeyComparer : IComparer<string> { public int Compare(string x, string y) { return String.Compare(x, y, StringComparison.Ordinal); } } private static void WorkerExited(object sender, System.EventArgs arg) { Debug.LogError(":::" + sender.ToString()); Debug.LogError(":::"+arg.ToString()); } private Vector2 _scrollPos = Vector2.zero; private string[] _LuaMethods = null; private void OnGUI() { if (GUILayout.Button("测试上传文件")) { var upLoadURL = "http://10.0.1.182:8081/photocheck/photodata/upload"; var filePath = EditorUtility.OpenFilePanel("上传文件", ".", "*.*"); if (string.IsNullOrEmpty(filePath)) return; var bytes = File.ReadAllBytes(filePath); WWWForm form = new WWWForm(); form.AddBinaryData("photoData", bytes, filePath); form.AddField("desc1","20013"); form.AddField("desc2", "a55c9410a53994fc6a9d73331d8a02a6"); form.AddField("desc3", "无名"); form.AddField("photoId",""); form.AddField("extName", Path.GetExtension(filePath)); // send to http server. var w = UnityWebRequest.Post(upLoadURL, form); var v = w.SendWebRequest(); v.completed += (x) => { UnityEngine.Debug.Log("upload success " + filePath + ";;" + upLoadURL+"::"+w.error); }; } #if _USE_FUNCATION_TEST_ON if (Application.isPlaying) { //if (GameCenter.IsInitialized) { GUILayout.Label("可以到Editor\\TestToolEditor中修改代码,不需要重启,只需要点击刷新脚本就可以了."); _scrollPos = EditorGUILayout.BeginScrollView(_scrollPos); if (GUILayout.Button("刷新脚本")) { GameCenter.LuaSystem.LuaEnv.DoString("Utils.RemoveRequiredByName('Editor.TestToolEditor')"); GameCenter.LuaSystem.LuaEnv.DoString("TestToolEditor = require 'Editor.TestToolEditor'"); object[] ret = GameCenter.LuaSystem.LuaEnv.DoString("return TestToolEditor.GetAllMethods()"); if (ret != null && ret.Length > 0) { var lt = (LuaTable)(ret[0]); if (lt != null) { _LuaMethods = lt.Cast<string[]>(); if (_LuaMethods == null) { Debug.LogError("TestToolEditor.GetAllMethods() 第一个返回值不是一个String[]"); } } else { Debug.LogError("TestToolEditor.GetAllMethods() 第一个返回值不是一个LuaTable"); } } else { Debug.LogError("TestToolEditor.GetAllMethods() 返回值为null"); } } if (_LuaMethods != null) { for (int i = 0; i < _LuaMethods.Length-1; i+=2) { if (!string.IsNullOrEmpty(_LuaMethods[i])) { if (GUILayout.Button(_LuaMethods[i])) { GameCenter.LuaSystem.LuaEnv.DoString("TestToolEditor." + _LuaMethods[i + 1] + "()"); } } } } EditorGUILayout.EndScrollView(); } //else // { // EditorGUILayout.LabelField("需要在GameCenter初始化完成后才可以使用!"); // } } else { EditorGUILayout.LabelField("需要在运行模式才可以使用!"); } #else EditorGUILayout.LabelField("请在文件Editor/DIY/SelfTesting/TestToolEditor.cs第一行处,打开宏 _USE_FUNCATION_TEST_ON"); #endif } } }