NodeJS: скачать файл и преобразовать в двоичную строку - PullRequest
0 голосов
/ 14 декабря 2018

Я довольно новичок в Node.js и борюсь с текущей темой:

Я вызываю API, который возвращает мне файл (audio.amr).Теперь мне нужно преобразовать этот файл во время выполнения, не сохраняя его, в двоичную строку, чтобы передать его дальше.

Я попытался передать полученный объект в модуль "fs", но безуспешно.

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

В "obj" теперь возвращается файл, который мне нужно преобразовать в двоичную строку.

1 Ответ

0 голосов
/ 14 декабря 2018

Вы можете использовать ArrayBuffer для хранения двоичных данных, а затем преобразовать ArrayBuffer в шестнадцатеричную строку.Чтобы получить необработанное тело от requesttify, вы должны будете использовать свойство .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, window.fetch polyfill для nodeJS.

Ваш код с ним будет выглядеть следующим образом:

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
});
...