将文件上载到远程表单时出现通用/未知HTTP错误

时间:2018-04-14 20:30:01

标签: c# forms unity3d webrequest

我有一个HTML page,其中包含一个用于将文件上传到SmartFile的表单。下面是我用来将我在Unity游戏中的文件上传到此网址的C#代码。

WWWForm fileForm = new WWWForm();
string[] files = Directory.GetFiles(".", "*.txt");
fileForm.AddField("file", files[0]);
WWW www = new WWW("https://file.ac/xySSFOicMMk", fileForm);            

不幸的是,它导致了以下异常。这有什么不对?

  

发送分析时出现连接错误...错误:415不支持   媒体类型UnityEngine.Debug:LogError(Object)   c__Iterator0:MoveNext()(在Assets / Survey / Survey.cs:99)   UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator,IntPtr)

更新1: - 我将第3行更改为fileForm.AddBinaryData("file", File.ReadAllBytes(files[i]), files[i], "text/plain");

我不再收到错误,但即使www.isDone返回true,仍然无法看到文件上传。

更新2: - 尝试了UnityWebRequest API,它导致了

  

通用/未知HTTP错误(400响应代码)

List<IMultipartFormSection> formData = new List<IMultipartFormSection>();           
byte[] bytes = File.ReadAllBytes(files[0]);
files[0] = files[0].Replace(@".\","");      
formData.Add(new MultipartFormFileSection("file", bytes, files[0], "text/plain"));
StartCoroutine(UploadFile(formData));  
IEnumerator UploadFile(List<IMultipartFormSection> formData)
{       
    UnityWebRequest www = UnityWebRequest.Post("https://file.ac/xySSFOicMMk", formData);
    yield return www.SendWebRequest();

    if (www.isNetworkError || www.isHttpError)
    {
        Debug.Log(www.error);
    }
    else
    {
        Debug.Log("Form upload complete!");
    }
}

UnityWebRequest.Post似乎无法在Unity版2017.3.1f1(64位)中使用WWWForm' or List`工作

1 个答案:

答案 0 :(得分:1)

使用HttpWebRequest与找到的解决方案here以及this一起修复Unity中的证书错误,最后让您高枕无忧。整个解决方案发布在此处 - https://pastebin.com/wNQ46s0H

似乎为了让WWWForm工作,您需要在表单中同时包含二进制和非二进制数据 - HttpWebRequest post paramaters for AWS file upload request, leading to 400 error