NodeJS:下载文件并转换为二进制字符串

时间:2018-12-14 09:27:01

标签: javascript node.js binary fs

我对Node.js还是很陌生,并且在当前话题上苦苦挣扎:

我正在调用一个API,该API向我返回了一个文件(audio.amr)。现在,我需要在运行时将此文件转换为二进制字符串,而不进行保存,以便进一步传递。

我尝试将接收到的对象传递给“ fs”模块,但是没有任何运气。

requestify.request('https://some-url.com', {
                method: 'GET'
            }).then(function (response) { var obj = response.getBody() }

现在,在“ obj”中返回的文件需要转换为二进制字符串。

1 个答案:

答案 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
});