#c# #unity3d #post #unitywebrequest
#c# #unity3d #Публикация #unitywebrequest
Вопрос:
В настоящее время я пытаюсь сделать запрос на публикацию в Unity, где я загружаю аудио.файл wav. Проблема в том, что когда я запускаю код, он показывает мне ошибку из заголовка, и я не знаю, в чем проблема. Мне кажется, что я все настроил правильно, но это все равно не работает.
Вот мой почтовый запрос:
void Start() { Debug.Log("POST REQUEST START"); StartCoroutine(PostRequest()); } IEnumerator PostRequest() { var url = "http://localhost/api/speech"; string dirPath = Path.Combine(Application.persistentDataPath, "myfile.wav"); byte[] postData = File.ReadAllBytes(dirPath); Listlt;IMultipartFormSectiongt; formData = new Listlt;IMultipartFormSectiongt;(); formData.Add(new MultipartFormFileSection("fileUpload", postData, "myfile.wav", "application/octet-stream")); UnityWebRequest www = UnityWebRequest.Post(url, formData); yield return www.SendWebRequest(); if (www.isNetworkError || www.isHttpError) { Debug.Log(www.error); } else { Debug.Log("Form upload complete! " www.downloadHandler.text); } }
Вот мое рабочее решение для почтальона:
Вот код запроса на публикацию API:
[HttpGet] public JsonResult getText() { byte[] bytes = System.IO.File.ReadAllBytes("Files/javascript_audio_sample.wav"); RecognitionAudio audio = RecognitionAudio.FromBytes(bytes); return new JsonResult(transcribe(audio)); } [HttpPost] public Listlt;stringgt; postFile() { Listlt;stringgt; results = new Listlt;stringgt;(); if (Request.HasFormContentType) { var form = Request.Form; foreach (var formFile in form.Files) { if (formFile.Length gt; 0) { var stream = formFile.OpenReadStream(); RecognitionAudio audio = RecognitionAudio.FromStream(stream); results.Add(transcribe(audio)); } } } return results; }
Комментарии:
1. Вам нужно заглянуть в код сервера (что бы ни обслуживало эту конечную точку «/api/речь»), чтобы выяснить, почему. Может ли файл, который вы загружаете, быть поврежден?
2. @tromgy Файл хорош, потому что я попробовал его с Почтальоном, и это сработало.
3. Очевидно
500 Internal Server Error
, что что-то происходит за пределами вашегоc#
кода, а скорее на стороне сервера / API. Если это работает с помощью почтальона, но не через васUnityWebRequest
, убедитесь, что все параметры и т.д. Закодированы / используются точно так же … это помогло бы увидеть ваше рабочее решение для почтальона, чтобы мы могли просмотреть и сравнить то, что вы делаетеc#
.. Хотя еще лучше, вероятно, было бы иметь сам код на стороне сервера4. @derHugo Эй, спасибо за ваши отзывы. Я только что добавил скриншот своего решения Почтальона. Мы очень ценим вашу помощь.
5. Используйте отладчик HTTP, такой как Fiddler, чтобы устранить разницу между тем, что делают Postman и Unity.