【问题标题】:How to attach a file to a form in Unity?如何将文件附加到 Unity 中的表单?
【发布时间】:2021-12-08 10:41:59
【问题描述】:

我目前正在尝试使用附加到表单的文件发出发布请求,但我发现它不是我附加的文件,而只是文件的路径。

我的问题是如何获取此文件并将其附加到表单中?

到目前为止,这是我的代码:

    string altPath = Path.Combine(Application.persistentDataPath, "nice-work.wav");

 
    List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
    formData.Add(new MultipartFormFileSection("wavfile", altPath));

    UnityWebRequest uwr = UnityWebRequest.Post(url, formData);
    yield return uwr.SendWebRequest();

    if (uwr.isNetworkError)
    {
        Debug.Log("Error While Sending: " + uwr.error);
    }
    else
    {
        Debug.Log("Received: " + uwr.downloadHandler.text);
    }

变量 altPath 是路径而不是文件,这会导致发布请求失败。

【问题讨论】:

  • 你需要将该文件转换成字节数组然后上传
  • 是的,这行得通。谢谢。

标签: c# file unity3d multipartform-data


【解决方案1】:

如果你看MultipartFormFileSection你当前使用的构造函数是

MultipartFormFileSection(string data, string fileName)

这当然不是你想做的。

您宁愿必须实际阅读相应的文件内容,例如只需使用File.ReadAllBytes

...

var multiPartSectionName = "wavfile";
var fileName = "nice-work.wav";
var altPath = Path.Combine(Application.persistentDataPath, fileName);
var data = File.ReadAllBytes(altPath);

var formData = new List<IMultipartFormSection>
{
    new MultipartFormFileSection(multiPartSectionName, data, fileName)
};

...

或取决于您的服务器端需求

...

var formData = new List<IMultipartFormSection>
{
    new MultipartFormFileSection(fileName, data)
};

...

请记住,ReadAllBytes 是一个同步(阻塞)调用,对于较大的文件,您可能更愿意使用一些异步方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-09
    • 2016-04-27
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多