网络流创建 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
}
更多推荐
在 Node.js 中从网络流创建 blob
发布评论