【问题标题】:How to convert an arrayBuffer to a Uint8Array, in Deno?如何在 Deno 中将 arrayBuffer 转换为 Uint8Array?
【发布时间】:2020-07-06 18:51:15
【问题描述】:

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

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

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

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

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

如何做到这一点?

【问题讨论】:

    标签: javascript deno


    【解决方案1】:

    您必须将ArrayBuffer 传递给Uint8Array 构造函数

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

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

    【讨论】:

    • 是的,我实际上只是在另一个帖子上看到了这个,并意识到它与 Deno 无关,只是普通的 JS :D
    • 没错,这只是普通的 JS :)。
    • 如果您想流式传输到文件而不是缓冲,请在此处查看我的答案:stackoverflow.com/questions/61945050/…
    【解决方案2】:

    嗯...根据文档 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array),您只需执行以下操作:

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

    【讨论】:

      猜你喜欢
      • 2020-04-26
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 2018-02-19
      • 2018-09-27
      • 1970-01-01
      相关资源
      最近更新 更多