目前的问题是: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();
}