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
相关产品推荐
相关产品推荐

