Отправка аудио файла в API с помощью Python - PullRequest
0 голосов
/ 27 апреля 2018

У меня проблема с отправкой аудиофайла в мой API.

Передняя панель:

import requests
url = "https://f16de73c.ngrok.io/api/audio"
files = {'command': open(r'C:\Users\rickk\Desktop\agenda.wav', 'rb')}

headers = {
  'content-type': 'multipart/form-data'
}
r = requests.post(url, files=files, headers=headers)
print(r)
print(r.text)

Когда я отправляю вызов API на свой бэкэнд без заголовка, бэкэнд получит файл, но вернет 400, потому что у него нет типа контента. Когда я добавляю заголовок, я получу код состояния 500 назад

'content-type': 'audio / wav' также возвращает мне код состояния 500

Backend:

    [Produces("application/json")]
    [Route("api/audio")]
    [HttpPost]
    public async Task<IActionResult> ProcessCommandAsync([FromForm]IFormFile command)
    {  
        if(command.ContentType != "audio/wav" && command.ContentType != "audio/wave" || command.Length < 1)
        {
            return BadRequest();
        }
        var text = await CovnvertSpeechToTextApiCall(ConvertToByteArrayContent(command));

        return Ok(FormulateResponse(text));
    }

Когда я отправляю запрос с Почтальоном / Бессонницей без заголовков, нет проблем, поэтому я создал код с почтальоном. Бэкэнд принимает его и видит тип контента как аудио / wav, но файл явно пуст.

import requests

url = "http://localhost:57566/api/audio"

payload = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"command\"; filename=\"agenda.wav\"\r\nContent-Type: audio/x-wav\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"
headers = {
'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW"
}

response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)

Кто-нибудь знает / есть какие-либо предложения относительно того, как отправить аудиофайл на сервер с правильным типом контента?

1 Ответ

0 голосов
/ 27 апреля 2018

Не используйте files, который отправляет многочастный запрос с именованными частями, но используйте data, который отправляет необработанный аудиофайл в качестве тела запроса. Установите content-type на audio/wav:

import requests

url = "https://f16de73c.ngrok.io/api/audio"
data = open(r'C:\Users\rickk\Desktop\agenda.wav', 'rb')}   
headers = {'content-type': 'audio/wav'}

r = requests.post(url, data=data, headers=headers)

print(r)
print(r.text)    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...