如何在 Deno 中将 arrayBuffer 转换为 Uint8Array?

i.b*_*rod 3 javascript deno

我正在使用 fetch api 在 Deno 中下载图像。在 Response 对象上,我正在调用 arrayBuffer() 方法,以获取响应的最终数据:

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

然后我想把这些数据写入一个文件,就像你在 Node 中做的那样:

await Deno.writeFile('./someimage.jpg' ,data)
Run Code Online (Sandbox Code Playgroud)

图像变成空的。文档说 Deno.writeFile 需要一个 Uint8Array,但我不知道如何从 arrayBuffer 构造它,它是从 fetch 响应接收的。

如何才能做到这一点?

Mar*_*nde 5

您必须将 传递ArrayBufferUint8Array构造函数

您不能直接操作 ArrayBuffer 的内容;相反,您创建一个类型化数组对象或一个以特定格式表示缓冲区的 DataView 对象,并使用它来读取和写入缓冲区的内容。

new Uint8Array(arrayBuffer);
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)