Как прикрепить файл к форме в Unity?

#c# #file #unity3d #multipartform-data

#c# #файл #unity3d #составная форма-данные

Вопрос:

В настоящее время я пытаюсь сделать запрос post с файлом, прикрепленным к форме, но я обнаружил, что это не тот файл, который я прикрепил, а просто путь к файлу.

Мой вопрос в том, как мне получить этот файл и прикрепить его к форме?

Вот мой код на данный момент:

     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 — это путь, а не файл, и это приводит к неудачному post-запросу.

Комментарии:

1. вам нужно преобразовать этот файл в массив байтов, а затем загрузить его

2. Да, это сработало. Спасибо.

Ответ №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 это синхронный (блокирующий) вызов, и для файлов большего размера вы, возможно, захотите использовать какой-то асинхронный подход.