using Common; using ICSharpCode.SharpZipLib.Zip; using Newtonsoft.Json; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; public class FileControllor : MonoBehaviour { public string mainString; /// /// 下载 /// public Button btnSaveExcel; /// /// 上传 /// public Button btnOpenExcel; /// /// 打开Excel /// public Button btnLoadExcel; /// /// /// public bool isSave = false; public string downloadNumber; /// /// /// public string downloadUrl; /// /// 下载地址 /// public string uploadExamData; /// /// 下载地址 /// public string uploadUrl; /// /// 上传成功 /// public GameObject UpTrue; /// /// 上传失败 /// public GameObject UpFalse; public string pathMain; public UploadFileData uploadFileData = new UploadFileData(); void Start() { downloadUrl = "http://172.16.1.113:9000/file/biaodan/基建工程延期供应计划调整附件_附件1_供应计划制定.xlsx"; uploadUrl = "http://172.16.1.113:8083/member/pro/upload/uploadFileAndParam"; PlayerPrefs.SetString("ExcelNane", mainString); btnSaveExcel.onClick.AddListener(() => { SaveProject(); btnOpenExcel.gameObject.SetActive(true); }); btnOpenExcel.onClick.AddListener(() => { OpenProject(); //btnOpenExcel.gameObject.SetActive(false); }); btnLoadExcel.onClick.AddListener(() => { OpenExcelFile(pathMain); }); } List zipFilePaths = new List(); /// /// 打开文件 /// public void OpenProject() { OpenFileDlg pth = new OpenFileDlg(); pth.structSize = System.Runtime.InteropServices.Marshal.SizeOf(pth); //pth.filter = "xlsx (*.XLSX)"; pth.file = new string(new char[256]); pth.maxFile = pth.file.Length; pth.fileTitle = new string(new char[64]); pth.maxFileTitle = pth.fileTitle.Length; pth.initialDir = Application.dataPath; // default path pth.title = "上传文件"; //pth.defExt = "XLSX"; pth.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008; if (OpenFileDialog.GetOpenFileName(pth)) { string filepath = pth.file;//选择的文件路径; Debug.Log(filepath); //Upload(filepath); if (!zipFilePaths.Contains(filepath)) { zipFilePaths.Add(filepath); } } } private void Update() { if (Input.GetKeyDown(key: KeyCode.F1)) { Test_Zip(); } } /// /// 下载Excel模板到本地 /// public void SaveProject() { SaveFileDlg pth = new SaveFileDlg(); pth.structSize = System.Runtime.InteropServices.Marshal.SizeOf(pth); //pth.filter = "xlsx (*.XLSX)"; pth.file = new string(new char[256]); pth.maxFile = pth.file.Length; pth.fileTitle = new string(new char[64]); pth.maxFileTitle = pth.fileTitle.Length; pth.initialDir = Application.dataPath; // default path pth.title = "保存文件"; pth.defExt = "XLSX"; pth.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008; if (SaveFileDialog.GetSaveFileName(pth)) { string filepath = pth.file;//选择的文件路径; Debug.Log(filepath); //StartCoroutine(DownloadFiles(filepath, downloadUrl)); Download(filepath); } } /// /// 上传文件 /// /// /// 文件地址 /// IEnumerator UploadFile(string url, string path) { byte[] bytes = File.ReadAllBytes(path); WWWForm formData = new WWWForm(); formData.AddBinaryData("file", bytes, System.IO.Path.GetFileName(path), "application/octet-stream"); formData.AddField("stuId", uploadFileData.stuId); formData.AddField("appId", uploadFileData.appId); formData.AddField("examId", uploadFileData.examId); formData.AddField("examinationId", uploadFileData.examinationId); UnityWebRequest request = UnityWebRequest.Post(url, formData); request.SetRequestHeader("Authorization", uploadFileData.token); Debug.Log("Authorization"); yield return request.SendWebRequest(); Debug.Log("SendWebRequest"); if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { Debug.Log(request.error); UpTrue.SetActive(false); UpFalse.SetActive(true); } else { string GetStr = request.downloadHandler.text; Debug.Log(GetStr); JsonResponseExcel response = JsonConvert.DeserializeObject(GetStr); if (response.code == 200) { Debug.Log($"成功,{response.data.url}||{response.data.name}"); UpTrue.SetActive(true); UpFalse.SetActive(false); zipFilePaths.Clear(); //btnOpenExcel.gameObject.SetActive(false); } else { Debug.Log($"失败,code 是 {response.code}: {response.msg}"); UpTrue.SetActive(false); UpFalse.SetActive(true); } } } /// /// 上传文件 /// /// public void Upload(string path) { string url = uploadUrl; uploadFileData.stuId = "123"; uploadFileData.appId = "456"; uploadFileData.examId = "789"; uploadFileData.examinationId = "101112"; uploadFileData.token = "token"; StartCoroutine(UploadFile(url, path)); } /// /// 下载文件 /// /// 文件路径 /// 地址 /// IEnumerator DownloadFile(string path, string url) { UnityWebRequest request = UnityWebRequest.Get(url); yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { Debug.Log(request.error); } else { File.WriteAllBytes(path, request.downloadHandler.data); Debug.Log("文件下载完成"); pathMain = path; btnSaveExcel.gameObject.SetActive(false); btnLoadExcel.gameObject.SetActive(true); OpenExcelFile(path); isSave = true; } } /// /// 打开Excel文件 /// /// 文件地址 public void OpenExcelFile(string filePath) { // 检查文件是否存在 if (File.Exists(filePath)) { try { System.Diagnostics.Process.Start(filePath); } catch (System.Exception e) { UnityEngine.Debug.LogError("Error opening file: " + e.Message); } } else { UnityEngine.Debug.LogError("File not found: " + filePath); } } void Download(string path) { string url = downloadUrl; StartCoroutine(DownloadFile(path, url)); } #region Test_Zip void Test_Zip() { string zipOutputPath = Application.streamingAssetsPath + "/zipTest.zip"; if (ZipWrapper.Zip(zipFilePaths, zipOutputPath, "", new ZipCallback())) { Upload(zipOutputPath); } } public class ZipCallback : ZipWrapper.ZipCallback { public override bool OnPreZip(ZipEntry _entry) { Debug.Log("OnPreZip Name: " + _entry.Name); Debug.Log("OnPreZip IsFile:" + _entry.IsFile); return base.OnPreZip(_entry); } public override void OnPostZip(ZipEntry _entry) { Debug.Log("OnPostZip Name: " + _entry.Name); } public override void OnFinished(bool _result) { Debug.Log("OnZipFinished _result: " + _result); } } #endregion #region Test_UnZip public class UnzipCallback : ZipWrapper.UnzipCallback { public override bool OnPreUnzip(ZipEntry _entry) { Debug.Log("OnPreUnzip Name: " + _entry.Name); Debug.Log("OnPreUnzip IsFile:" + _entry.IsFile); return base.OnPreUnzip(_entry); } public override void OnPostUnzip(ZipEntry _entry) { Debug.Log("OnPostUnzip Name: " + _entry.Name); base.OnPostUnzip(_entry); } public override void OnFinished(bool _result) { Debug.Log("OnUnZipFinished _result: " + _result); base.OnFinished(_result); } } #endregion } public class JsonResponseExcel { public int code { get; set; } public string msg { get; set; } public ReceiveData data { get; set; } } public class ReceiveData { public string name { get; set; } public string url { get; set; } public string id { get; set; } public string data { get; set; } } public class UploadFileData { public string stuId { get; set; } public string appId { get; set; } public string examId { get; set; } public string examinationId { get; set; } public string token { get; set; } }