Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting the binary content of a BLOB

I know that, in order to convert a BLOB object to a readable format (URL) in Javascript, I should use the createObjectURL() method, right ?

Example :

var blob = new Blob(["Example"], { type: "text/plain" });
url = window.URL.createObjectURL(blob);

My question is:

Is it possible to get the raw binary content of a BLOB ? so, I can get something like :

"01000101 01111000 01100001 01101101 01110000 01101100 01100101" // "Example" in binary .
like image 222
CryptoBird Avatar asked Apr 04 '18 14:04

CryptoBird


People also ask

Is a BLOB binary data?

BLOB stands for a “Binary Large Object,” a data type that stores binary data. Binary Large Objects (BLOBs) can be complex files like images or videos, unlike other data strings that only store letters and numbers. A BLOB will hold multimedia objects to add to a database; however, not all databases support BLOB storage.

How do I read a BLOB file?

If you cannot open your BLOB file correctly, try to right-click or long-press the file. Then click "Open with" and choose an application. You can also display a BLOB file directly in the browser: Just drag the file onto this browser window and drop it.

What is the difference between BLOB and binary?

BLOB type requires a smaller data size for base rows than BINARY type, so if there are many pieces of data, BLOB will yield better performance. However, if indexes are defined for the non-BINARY columns, index scans will eliminate the difference between BINARY and BLOB types.

Is ArrayBuffer a BLOB?

An ArrayBuffer is in the memory, available for manipulation. A Blob can be on disk, in cache memory, and other places not readily available. But the data from a Blob can be copied into an ArrayBuffer.


1 Answers

Convert the blob to an ArrayBuffer (see 2 methods). Create an ArrayBufferView (Int8array in this case), spread it into an array, and then map the view to the binary representation of each number using Number.toString() with a radix of 2 - .toString(2).

Method 1 - Use the Blob.arrayBuffer() instance method to get a promise that resolves with the ArrayBuffer:

const blobToBinary = async (blob) => {
  const buffer = await blob.arrayBuffer();
  
  const view = new Int8Array(buffer);
  
  return [...view].map((n) => n.toString(2)).join(' ');
};

const blob = new Blob(["Example"], { type: "text/plain" });

blobToBinary(blob).then(console.log);

Method 2 - Extract the data from the blob using a FileReader. To get an ArrayBuffer use FileReader.readAsArrayBuffer().

const blob = new Blob(["Example"], { type: "text/plain" });

const reader = new FileReader();

reader.addEventListener("loadend", function() {  
  const view = new Int8Array(reader.result);
  
  const bin = [...view].map((n) => n.toString(2)).join(' ');
  
  console.log(bin);
});

reader.readAsArrayBuffer(blob);
like image 125
Ori Drori Avatar answered Oct 26 '22 00:10

Ori Drori