How To Convert A File To A Byte Array
JavaScript
13/05/2021
Let's say you've got a file (e.g. image) that you want to send to a server via REST API.
const inputNode = document.getElementById('upload_file')const selectedFile = inputNode.files[0]And for that you wish to first convert the file into a byte array. To start off, define an asynchronous function called getAsByteArray that returns it as such. Specifically, it returns a Uint8Array object.
async function getAsByteArray(file) { return new Uint8Array(await readFile(file))}To instantiate the object, the constructor accepts a number of different parameters. The one we care about is a buffer, i.e. an ArrayBuffer object. We can pass our file as one to the constructor with the help of the FileReader API.
Let's do that in a new function called readFile.
function readFile(file) { return new Promise((resolve, reject) => { // Create file reader let reader = new FileReader()
// Register event listeners reader.addEventListener("loadend", e => resolve(e.target.result)) reader.addEventListener("error", reject)
// Read file reader.readAsArrayBuffer(file) })}This function returns a Promise that will resolve once the file as has been fully read from the readAsArrayBuffer() function. As this is an asynchronous operation, once done, it triggers a loadend event, hence why we've added an event listener to the reader object.
Now that everything's set up, converting your file to a byte array is as easy as:
const byteFile = await getAsByteArray(file)