You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中通过Web Stream将ipfs-car生成的CAR文件转为Blob

解决ipfs-car打包CAR文件转Blob的问题

默认的WritableStream仅负责处理写入操作,不会主动存储数据。你需要自定义一个能收集流数据块的写入流实现,之后再用收集到的数据创建Blob。

修改后的完整代码如下:

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

export const packCAR = async (files) => {
  // 用于存储流传输的数据块
  const carChunks = []

  // 自定义可写入流,收集每个数据块
  const outStream = new WritableStream({
    write(chunk) {
      // 将每个Uint8Array类型的chunk存入数组
      carChunks.push(chunk)
    }
  })

  const blockStream = createDirectoryEncoderStream(files)
  const carEncoderStream = new CAREncoderStream([])

  // 完成流的管道传输
  await blockStream.pipeThrough(carEncoderStream).pipeTo(outStream)

  // 用收集到的数据块创建Blob,指定CAR文件的MIME类型
  return new Blob(carChunks, { type: 'application/vnd.ipld.car' })
}

关键说明:

  • 自定义WritableStream的write方法会接收流传输的每个Uint8Array数据块,将其存入数组
  • 管道操作完成后,数组中会包含完整的CAR文件数据片段,直接传入Blob构造函数即可生成完整的CAR文件Blob
  • 指定type: 'application/vnd.ipld.car'可以让Blob拥有正确的文件类型标识,方便后续作为文件发送请求

内容的提问来源于stack exchange,提问作者user11889402

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:57:10