我对Node.js还是很陌生,并且在当前话题上苦苦挣扎:
我正在调用一个API,该API向我返回了一个文件(audio.amr)。现在,我需要在运行时将此文件转换为二进制字符串,而不进行保存,以便进一步传递。
我尝试将接收到的对象传递给“ fs”模块,但是没有任何运气。
requestify.request('https://some-url.com', {
method: 'GET'
}).then(function (response) { var obj = response.getBody() }
现在,在“ obj”中返回的文件需要转换为二进制字符串。
答案 0 :(得分:0)
您可以使用ArrayBuffer
来保存二进制数据,然后将ArrayBuffer转换为十六进制字符串。根据{{3}},要从requestify获取原始内容,必须使用.body
属性而不是getBody()
函数。
您必须检查原始主体的类型,并在必要时将其转换为ArrayBuffer。
// ...
var obj = response.body; // Get the raw body
var arrayBuffer = new TextEncoder().encode (obj); // Convert String data to ArrayBuffer (might need to be changed)
var hexString = bufferToHex (arrayBuffer);
// ...
function bufferToHex (buffer) {
return Array
.from (new Uint8Array (buffer))
.map (b => b.toString (16).padStart (2, "0"))
.join ("");
}
更新:
由于显然requestify
无法处理原始数据,我建议您使用node-fetch
,这是一种用于nodeJS的window.fetch
polyfill。
您的代码如下所示:
const fetch = require ("node-fetch");
fetch(yourUrl, {
method: 'GET'
}).then(function (response) {
return response.arrayBuffer ();
}).then(function (arrayBuf) {
const hexString = bufferToHex (arrayBuf);
// Do whatever you want
});