2016-06-08 59 views
2

我必須將遠程文件的二進制內容發送到API端點。我使用request library讀取遠程文件的二進制內容並將其存儲在一個變量中。現在,變量中的內容已準備好發送,如何使用請求庫將它發佈到遠程API。如何使用請求庫在請求中POST二進制數據?

我有什麼當前,不工作是:

const makeWitSpeechRequest = (audioBinary) => { 
    request({ 
    url: 'https://api.wit.ai/speech?v=20160526', 
    method: 'POST', 
    body: audioBinary, 
    }, (error, response, body) => { 
    if (error) { 
     console.log('Error sending message: ', error) 
    } else { 
     console.log('Response: ', response.body) 
    } 
    }) 
} 

我們可以安全地假設這裏audioBinary具有從遠程文件中讀取的二進制內容。

當我說它不起作用時,我的意思是什麼?
負載在請求調試中顯示出不同。 實際的二進制有效載荷:ID3TXXXmajor_brandisomTXXXminor_version512TXXX
有效載荷在調試表明:ID3\u0004\u0000\u0000\u0000\u0000\u0001\u0006TXXX\u0000\u0000\u0000\

在什麼終端工作?
我所知道的從終端工作是與它的內容也以相同的命令文件中的內容有所不同:

curl -XPOST 'https://api.wit.ai/speech?v=20160526' \ 
     -i -L \ 
     --data-binary "@hello.mp3" 
+0

你得到任何的成功嗎? – Utkarsh

+0

是的,我會在這裏發佈答案。答案在文檔中。 –

回答

2

在請求庫中的選項來發送二進制數據,因此是encoding: null。編碼的默認值是string,所以默認的內容會被轉換爲utf-8

所以正確的方式在上面的例子中發送二進制數據是:

const makeWitSpeechRequest = (audioBinary) => { 
    request({ 
    url: 'https://api.wit.ai/speech?v=20160526', 
    method: 'POST', 
    body: audioBinary, 
    encoding: null 
    }, (error, response, body) => { 
    if (error) { 
     console.log('Error sending message: ', error) 
    } else { 
     console.log('Response: ', response.body) 
    } 
    }) 
} 
+1

還要確保傳遞給請求的選項中的'json'屬性沒有設置爲'true',因爲這將覆蓋'encoding:null'並導致將該正文視爲文本。 – alphaloop