使用UnityWebRequest向服務端發送本地存檔和日志


為了實現本地存檔的雲服務化。搞了一個雲存檔的機制。順帶把測試中發生的各種報錯日志也發送到服務端進行后續處理和查錯。

 

Unity上傳文件

 public IEnumerator UploadLog()
    {
        string filesPath = Application.persistentDataPath + "/log.txt";

        UnityWebRequest files = new UnityWebRequest();
        WWWForm form = new WWWForm();

        files = UnityWebRequest.Get(filesPath);
        yield return files.SendWebRequest();
        form.AddBinaryData("files", files.downloadHandler.data, "client_log.log");
        long fileLen = files.downloadHandler.data.Length;
//限制文件大小 if (fileLen < 5120000) { Debug.Log("file len: " + fileLen); UnityWebRequest req = UnityWebRequest.Post("http://xxxxxxx", form); yield return req.SendWebRequest(); if (req.isHttpError || req.isNetworkError) Debug.LogError(req.error); else Debug.Log("Uploaded log Successfully"); } else { Debug.LogError("log文件太長了 " + fileLen); } }

  

 

對應的服務端接收和處理代碼

public function uploadLog()
    {
        $name = $_FILES['files']['name'];
        $size = $_FILES["files"]["size"];
        $nameArray = explode(".",$name);
        $extension = end($nameArray);        // 獲取文件后綴名
        if ( ($size < 5120000)  && $extension =="log")// 小於 5M 后綴名log
        {
            if ($_FILES["files"]["error"] > 0)
            {
                echo "錯誤:: " . $_FILES["files"]["error"] . "<br>";
                return;
            }
//            else
//            {
//                echo "上傳文件名: " . $_FILES["files"]["name"] . "<br>";
//                echo "文件類型: " . $_FILES["files"]["type"] . "<br>";
//                echo "文件大小: " . ($_FILES["files"]["size"] / 1024) . " kB<br>";
//                echo "文件臨時存儲的位置: " . $_FILES["files"]["tmp_name"];
//            }
        }
        else
        {
            echo "非法的文件";
            return ;
        }

        $time = date("Y_m_d");
        $userid = input('post.userid');

        if($userid==null)
        {
            echo "userId error!";
            return;
        }
        $uploadError = false;
        $filepath = APP_PATH . "../../UpLog/" .$time;
        if(!file_exists($filepath))
            $mkdir_file_dir = mkdir($filepath,0777,true); //獲取到標題,在最終的目錄下面建立一個文件夾用來存放分類指

        $tmpFilePath = $_FILES['files']['tmp_name'];

        if ($tmpFilePath != "")
        {
            $newFilePath = $filepath.'/'.$userid."_".$_FILES['files']['name'];
            if (!move_uploaded_file($tmpFilePath, $newFilePath))
                $uploadError = true;
        }
        if ($uploadError)
            echo "Upload Error";
        else
            echo "Uploaded Successfully";

    }

  

如上兩個方法配對。即可完成客戶端文件上傳服務端按照日期和自定目錄保存的功能。

相應的如果需要拉取文件只要配置好資源目錄和身份驗證模塊。

files = UnityWebRequest.Get(filesPath);

從指定的位置獲取即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM