如何在TypeScript中将ArrayBuffer转换为可读流?

3

我正在使用Pinata的pinFileToIPFS()函数,该函数需要一个ReadableStream以上传到Pinata的IPFS节点。 我有文件的字节数组,例如PNG的字节数组。 我想将这个字节数组转换为可读流,并将其上传到IPFS。 如何在typescript中进行转换?

export async function putFileToIPFS(file:any): Promise<string>{
  readableStream = ** CONVERT FILE TO READABLE **
  let cid ;
  try {
  cid = await pinata.pinFileToIPFS(readableStream)
  console.log(cid)
  }   
  catch (error) { console.error(error);}
  return cid['IpfsHash']
}

感谢

1个回答

0
export async function putFileToIPFS(file: ArrayBuffer) {
  const readableStream = new ReadableBufferStream(file)
  ...
}

function ReadableBufferStream(ab: ArrayBuffer) {
  return new ReadableStream({
    start(controller) {
      controller.enqueue(ab)
      controller.close()
    }
  })
}

另外,"读取大小" 可以通过设置具有多个排队的块大小来进行控制。这可能会增加/减少由 pinFileToIPFS() 发送的 HTTP 请求的数量。 subarray() 通过重用底层的ArrayBuffer 来维护内存占用。

function ReadableBufferStream(ab: ArrayBuffer, chunkSize = 64*1024) { // 64 KiB
  return new ReadableStream({
    start(controller) {
      const bytes = new Uint8Array(ab)
      for (let readIndex = 0; readIndex < bytes.byteLength;) {
        controller.enqueue(bytes.subarray(readIndex, readIndex += chunkSize))
      }
      controller.close()
    }
  })
}

对于第一次实现,我收到了以下错误:UnhandledPromiseRejectionWarning: ReferenceError: ReadableStream未定义。 - user16560224
你是在浏览器中运行还是通过命令行(Deno/NodeJS)运行? - anthumchris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接