convert buffer to binary in node.js
Just tested this and it works:
const response = await axios.get(
'https://example.com/image.png', { responseType: 'arraybuffer' }
);
const bin = response.data.toString('binary');
console.log(bin);
The key seems to be that you capitalized the b
in arraybuffer
. Also, response.data
is already a buffer, so you can just directly convert it to a string.
Nodejs Uint8Array,Uint16Array, Uint32Array
In your example, both typed arrays end up having 4 elements, but the Uint8Array
only uses 4 bytes to represent its contents, while the Uint8Array
uses 8. You can see this by inspecting the byteLength
property:
var buffer = Buffer.alloc(4, 'a');
var interface16 = new Uint16Array(buffer);
var interface8 = new Uint8Array(buffer);
console.log('Uint16 length: %d', interface16.length);
console.log('Uint16 byteLength: %d', interface16.byteLength);
console.log('Uint8 length: %d', interface8.length);
console.log('Uint8 byteLength: %d', interface8.byteLength);
Output
Uint16 length: 4
Uint16 byteLength: 8
Uint8 length: 4
Uint8 byteLength: 4
So the typed array constructors are creating typed arrays with the same number of elements as the source buffer, but the Uint16Array
constructor is using two bytes instead of one for each element, filling the high-order byte of each element with zero.
Converting between strings and ArrayBuffers
Update 2016 - five years on there are now new methods in the specs (see support below) to convert between strings and typed arrays using proper encoding.
TextEncoder
The TextEncoder
represents:
The
TextEncoder
interface represents an encoder for a specific method,
that is a specific character encoding, likeutf-8
,An encoder takes a stream of code points as input andiso-8859-2
,koi8
,
cp1261
,gbk
, ...
emits a stream of bytes.
Change note since the above was written: (ibid.)
Note: Firefox, Chrome and Opera used to have support for encoding
types other than utf-8 (such as utf-16, iso-8859-2, koi8, cp1261, and
gbk). As of Firefox 48 [...], Chrome 54 [...] and Opera 41, no
other encoding types are available other than utf-8, in order to match
the spec.*
*) Updated specs (W3) and here (whatwg).
After creating an instance of the TextEncoder
it will take a string and encode it using a given encoding parameter:
if (!("TextEncoder" in window)) alert("Sorry, this browser does not support TextEncoder...");
var enc = new TextEncoder(); // always utf-8console.log(enc.encode("This is a string converted to a Uint8Array"));
Node.js convert buffer to Int8Array
Node Buffer is currently entirely based on Uint8Array. Everything you can do with a Uint8Array instance you can do with a Buffer instance. And even more, because Buffer adds additional functions and properties. Internally, when a Buffer instance has to be created, they actually create an Uint8Array instance and then set its prototype to the Node Buffer prototype. So you can access the underlying ArrayBuffer with buffer1.buffer, etc.
Conversion of buffer data to blob in NodeJS
If you're here to convert a Node.js Buffer
to a JavaScript Blob
:
First of all, Node.js didn't have the Blob
class until versions v15.7.0
and v14.18.0
, so you need to import the Blob
class if you haven't already:
// NOTE: starting from Node.js v18.0.0, the following code is not necessary anymore
// CJS style
const { Blob } = require("buffer");
// ESM style
import { Blob } from "buffer";
NOTE: it appears that in Node.js v14/v15/v16/v17 (last checked: as of
v14.19.2
,v15.14.0
,v16.14.2
andv17.9.0
), theBlob
class is marked as experimental and not stable. Instead, in Node.jsv18.x.x
theBlob
class is marked as stable.
UPDATE 2022-04-25: starting with Node.js version
18.0.0
, you don't have to manually import theBlob
class anymore, but you can use it straight away in your code!
Once the Blob
class is available, the conversion itself is pretty simple:
const buff = Buffer.from([1, 2, 3]); // Node.js Buffer
const blob = new Blob([buff]); // JavaScript Blob
Old answer about how to transfer a Node.js Buffer
via JSON:
If you need to transfer a buffer of data through JSON, you can encode the buffer using a text-based encoding like hexadecimal or base64.
For instance:
// get the buffer from somewhere
const buff = fs.readFileSync("./test.bin");
// create a JSON string that contains the data in the property "blob"
const json = JSON.stringify({ blob: buff.toString("base64") });
// on another computer:
// retrieve the JSON string somehow
const json = getJsonString();
const parsed = JSON.parse(json);
// retrieve the original buffer of data
const buff = Buffer.from(parsed.blob, "base64");
Related Topics
Check If an Array Is Empty or Exists
How to Add an Object to an Array
How to Load Local Script Files as Fallback in Cases Where Cdn Are Blocked/Unavailable
Where to Write to Localstorage in a Redux App
How to Add Conditional Attribute in Angular 2
JavaScript Math, Round to Two Decimal Places
Get the Value of Checked Checkbox
Ajax, Back Button and Dom Updates
Can Es6 Template Literals Be Substituted at Runtime (Or Reused)
Nodejs Callbacks Simple Example
How to Calculate Md5 Hash of a File Using JavaScript
Angularjs Changes Urls to "Unsafe:" in Extension Page
How to Check If an Element Is Really Visible with JavaScript
How to Get the Day of Week and the Month of the Year
How to Break a String Across More Than One Line of Code in JavaScript
How to Toggle an Element's Class in Pure JavaScript
JavaScript - How to Extract Filename from a File Input Control