Я заставил Watson Speech-to-Text работать в Интернете. Теперь я пытаюсь сделать это, реагируя на родной, но получаю ошибки при загрузке файла.
Я использую HTTPS Watson API. Мне нужно установить Content-Type
, иначе Watson вернет ответ об ошибке. Однако в системе react-native, чтобы загрузка файла работала, нам, кажется, нужно установить 'Content-Type'
в 'multipart/form-data'
. Есть ли способ загрузить файл в react-native при установке Content-Type на 'audio/aac'
?
Если я установил 'Content-Type': 'multipart/form-data'
, Watson API выдает ошибку:
{
type: "default",
status: 400,
ok: false,
statusText: undefined,
headers: Object,
url: "https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?continuous=true",
_bodyInit: Blob,
_bodyBlob: Blob
}
Тело ответа:
{
"code_description": "Bad Request",
"code": 400,
"error": "No JSON object could be decoded"
}
Вот мой код (полный код здесь - gist.github.com):
const ext = 'aac';
const file_path = '/storage/emulated/0/Music/enter-the-book.aac';
data.append('file', {
uri: `file://${file_path}`,
name: `recording.${ext}`,
type: `audio/${ext}`
}, `recording.${ext}`);
const response = await fetch('https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?continuous=true', {
method: 'POST',
headers: {
// 'Content-Type': `audio/${ext}`,
'Content-Type': 'multipart/form-data',
'X-Watson-Authorization-Token': token
},
body: data
});
console.log('watson-stt::getResults - response:', response);
if (response.status !== 200) {
const error = await response.text();
throw new Error(`Got bad response "status" (${response.status}) from Watson Speach to Text server, error: "${error}"`);
}
Вот скриншот ошибки, которую я получаю, когда устанавливаю 'Content-Type': 'audio/aac'
: