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

Viewed 6614

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?

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))
Related