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