最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

在 Node.js 中从网络流创建 blob

网站源码admin15浏览0评论

在 Node.js 中从网络流创建 blob

在 Node.js 中从网络流创建 blob

我正在尝试通过

ipfs-car
(使用网络流)打包 CAR 文件,然后将其作为文件在请求中发送,但我不确定在流式传输后如何将其存储在
Blob
WritableStream

我有这段代码

import { CAREncoderStream, createDirectoryEncoderStream } from 'ipfs-car'
import { WritableStream } from 'node:stream/web'

export const packCAR = async (files) => {
  const blockStream = createDirectoryEncoderStream(files)
  const carEncoderStream = new CAREncoderStream([])
  const outStream = new WritableStream()
  await blockStream.pipeThrough(carEncoderStream).pipeTo(outStream)
  const blob = new Blob(/* what do I put here? */)
}

我还没有发现有人这样做,我只看到了如何将

Blob
转换为流,所以我们将不胜感激:)

回答如下:

将 WritableStream 的内容存储到 Blob 中。这可以通过将 WritableStream 转换为 ReadableStream,然后将其转换为 ArrayBuffer,最后将 ArrayBuffer 存储到 Blob 来完成。

import { CAREncoderStream, createDirectoryEncoderStream } from 'ipfs-car'
import { WritableStream, ReadableStream } from 'node:stream/web'

export const packCAR = async (files) => {
  const blockStream = createDirectoryEncoderStream(files)
  const carEncoderStream = new CAREncoderStream([])
  const chunks = []
  const outStream = new WritableStream({
    write(chunk) {
      chunks.push(chunk)
    },
    close() {
      console.log('Stream is closed.')
    }
  })
  await blockStream.pipeThrough(carEncoderStream).pipeTo(outStream)
  const arrayBuffer = await new Blob(chunks).arrayBuffer()
  const blob = new Blob([arrayBuffer])
  return blob
}

发布评论

评论列表(0)

  1. 暂无评论