【问题标题】:Generic/unknown HTTP error when uploading files to a remote form将文件上传到远程表单时出现一般/未知 HTTP 错误
【发布时间】:2018-04-14 20:30:01
【问题描述】:

我有一个 HTML page,其中包含一个用于将文件上传到 SmartFile 的表单。下面是我用来将 Unity 游戏中的文件上传到此 url 的一段 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/Sur​​vey/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' orList`

【问题讨论】:

  • files[0] 的值是多少?
  • 我正在上传当前目录中的所有 txt 文件。我无法发布上面的整个代码,它在这里 - pastebin.com/FLLaWT79
  • files[i] === C:\Users\vipin\OneDrive\Documents\UnityProjects\PhD Research\AffectiveComputingGames\Bean Man with Affectiva\Bean Man - 4-13-2018-19-44 -3-ENGAGEMENT-DUMP.txt files[i] === C:\Users\vipin\OneDrive\Documents\UnityProjects\PhD Research\AffectiveComputingGames\Bean Man with Affectiva\Bean Man - 4-13-2018-19-44-3.txt
  • 问题出在您的服务器端 file.ac/xySSFOicMMk 。它甚至没有表单脚本并给出 500 错误错误。您的其他链接mouse-backtracker.herokuapp.com/GESFileUpload.html 很好,如果您查看源代码,您将看到表单代码。令人遗憾的是,我提到的错误 url 的操作链接 file.ac/xySSFOicMMk 。我无法使用我的 Chrome 浏览器通过 mouse-backtracker.herokuapp.com/GESFileUpload.html 上传文件,因此您也无法通过代码上传文件。修复它并确保您可以从浏览器上传代码然后通过代码尝试
  • url 抛出 500 错误,但您实际上可以使用该链接上传文件,尽管出现 500 错误。我已经使用它完成了多次上传,所以它工作正常。我得到了您使用链接上传的 test.png - file.ac/sU1paNXY4do

标签: c# forms unity3d webrequest


【解决方案1】:

使用HttpWebRequesthere 找到的解决方案以及this 来修复Unity 中的证书错误,终于放心了。完整的解决方案发布在这里 - https://pastebin.com/wNQ46s0H

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多