li810954821 2022-11-03 22:45 采纳率: 0%
浏览 82
已结题

如何升级unity代码 兼容发布WebGL

目前的问题是:unity 编辑器模式下可以用,但是打包unityWebGL后就出问题报错。这串代码如何转换成 unity WebGL能正常运行的代码?即WebRequest 替换成 UnityWebRequest。求帮助急用

  void STHttpApi(int httpTimeout, AudioClip audioPath, string audioFormat, int sampleRate, string coreType, Dictionary<string, object> requests)
    {
        string res = null;

        WebRequest WebRequest = null;

        string param = buildParams(audioFormat, sampleRate, requests);
        //Debug.Log("param===>" + param + "\n");
        string boundary = Guid.NewGuid().ToString();                                       // 边界符
        byte[] beginBoundaryBytes = Encoding.UTF8.GetBytes("--" + boundary + "\r\n");     // 开始边界符
        byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); // 结束边界符
        byte[] newLineBytes = Encoding.UTF8.GetBytes("\r\n"); //换行
        string contentType = "multipart/form-data";//声明数据类型为multipart/form-data
        MemoryStream memoryStream = new MemoryStream();
            string url = baseUrl + coreType;
            WebRequest = WebRequest.Create(url) as WebRequest; // create request
            WebRequest.ContentType = string.Format(contentType + "; boundary={0}", boundary);
            WebRequest.Method = WebRequestMethods.Http.Post;
            WebRequest.Timeout = httpTimeout;
            WebRequest.Headers.Add("Request-Index:0");//Request-Index 固定为0
                                                      //text参数
            string formDataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n" + "{1}\r\n";

            string formItem = string.Format(formDataTemplate, "text", param);
            byte[] formItemBytes = Encoding.UTF8.GetBytes(formItem);

            memoryStream.Write(beginBoundaryBytes, 0, beginBoundaryBytes.Length); // 写入FormData项的开始边界符
            memoryStream.Write(formItemBytes, 0, formItemBytes.Length);           // 将键值对写入FormData项中

            //audio参数
            const string filePartHeaderTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type: application/octet-stream\r\n\r\n";

            //FileInfo fileInfo = new FileInfo(audioPath);
            string fileName = audioPath.name + ".mp3";// fileInfo.Name;

            string fileHeaderItem = string.Format(filePartHeaderTemplate, "audio", fileName);
            byte[] fileHeaderItemBytes = Encoding.UTF8.GetBytes(fileHeaderItem);


            memoryStream.Write(newLineBytes, 0, newLineBytes.Length); // 换行
            memoryStream.Write(beginBoundaryBytes, 0, beginBoundaryBytes.Length);      // 写入FormData项的开始边界符
            memoryStream.Write(fileHeaderItemBytes, 0, fileHeaderItemBytes.Length);    // 将文件头写入FormData项中

            int bytesRead;
            byte[] buffer = ConvertClipToBytes(audioPath);
            //FileStream fileStream = new FileStream(audioPath, FileMode.Open, FileAccess.Read);
            //while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
            //{
            //    memoryStream.Write(buffer, 0, bytesRead);                              // 将文件流写入FormData项中
            //}

            memoryStream.Write(buffer, 0, buffer.Length);//

            memoryStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);             // 写入FormData的结束边界符

            //发起请求
            WebRequest.ContentLength = memoryStream.Length;

            //Stream requestStream = WebRequest.GetRequestStream();
        memoryStream.Position = 0;
        byte[] tempBuffer = new byte[memoryStream.Length];
        memoryStream.Read(tempBuffer, 0, tempBuffer.Length);
        memoryStream.Close();
        if (tempBuffer == null)
        {
            Debug.Log("tempBuffer==null");
        }
        else
        {
            Debug.Log("tempBuffer.lenth" + tempBuffer.Length);
        }

        using (Stream newStream = WebRequest.GetRequestStream())
        {
            newStream.Write(tempBuffer, 0, tempBuffer.Length);
            newStream.Close();
        }
        //曾经问题处在这里,替换了
        //requestStream.Write(tempBuffer, 0, tempBuffer.Length);        // 将内存流中的字节写入 WebRequest 的请求流中

        //requestStream.Close();
        HttpWebResponse httpWebResponse = WebRequest.GetResponse() as HttpWebResponse; // 获取响应
        if (httpWebResponse != null)
        {
            StreamReader reader = new StreamReader(httpWebResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("utf-8"));
            res = reader.ReadToEnd();
            httpWebResponse.Close();
        }
        WebRequest.Abort();
    }

  • 写回答

1条回答 默认 最新

  • 不觉明了 2022-11-04 12:41
    关注

    使用命名空间using UnityEngine.Networking;

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月7日
  • 修改了问题 11月3日
  • 修改了问题 11月3日
  • 修改了问题 11月3日
  • 展开全部

悬赏问题

  • ¥15 有哪些AI工具提供可以通过代码上传EXCEL文件的API接口,并反馈分析结果
  • ¥15 二维装箱算法、矩形排列算法(相关搜索:二维装箱)
  • ¥20 nrf2401上电之后执行特定任务概率性一直处于最大重发状态
  • ¥15 二分图中俩集合中节点数与连边概率的关系
  • ¥20 wordpress如何限制ip访问频率
  • ¥15 自研小游戏,需要后台服务器存储用户数据关卡配置等数据
  • ¥15 请求解答odoo17外发加工某工序的实操方法
  • ¥20 IDEA ssm项目 跳转页面报错500
  • ¥20 系统直接进入应急模式了,请教一下,人要裂开了
  • ¥15 页面初次加载时,JS调用对象可以调用成功,但是一旦跳转到另一个页面,再跳转回来后这个对象就显示undefind了,调用也调用不了了,什么原因?