Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert an arrayBuffer to a Uint8Array, in Deno?

I'm using the fetch api to download an image in Deno. On the Response object, i'm calling the arrayBuffer() method, to get the final data of the response:

const response = await fetch('https://www.example.com/someimage.jpg')
const data = await response.arrayBuffer();//This returns an arrayBuffer.

Then i want to write this data into a file, just like you would do in Node:

await Deno.writeFile('./someimage.jpg' ,data)

The image turns out empty. The docs say Deno.writeFile expects a Uint8Array, but i have no clue how to construct this from the arrayBuffer, that is received from the fetch response.

How can this be done?

like image 979
i.brod Avatar asked Mar 23 '26 05:03

i.brod


2 Answers

You have to pass the ArrayBuffer to the Uint8Array constructor

You cannot directly manipulate the contents of an ArrayBuffer; instead, you create one of the typed array objects or a DataView object which represents the buffer in a specific format, and use that to read and write the contents of the buffer.

new Uint8Array(arrayBuffer);

const response = await fetch('https://www.example.com/someimage.jpg')
const data = await response.arrayBuffer();//This returns an arrayBuffer.
await Deno.writeFile('./someimage.jpg' , new Uint8Array(data))
like image 136
Marcos Casagrande Avatar answered Mar 25 '26 19:03

Marcos Casagrande


Hmm... according to the docs (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) you simply do the following:

// const data = await response.arrayBuffer();
const data = new ArrayBuffer(2); // Mock
const convertedData = new Uint8Array(data);

console.log(convertedData);
like image 20
Samuli Hakoniemi Avatar answered Mar 25 '26 17:03

Samuli Hakoniemi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!