我试着从github用fetch()函数下载文件。
然后,我尝试保存取回的文件流作为一个文件与fs模块.
在执行此操作时,我收到以下错误:
类型错误[错误_无效_参数_类型]:transform.writable”属性必须是WritableStream的示例。已收到WriteStream的示例
我的问题是,我不知道WriteStream和WritableStream之间的区别,也不知道如何转换它们。
下面是我运行的代码:
async function downloadFile(link, filename = "download") {
var response = await fetch(link);
var body = await response.body;
var filepath = "./" + filename;
var download_write_stream = fs.createWriteStream(filepath);
console.log(download_write_stream.writable);
await body.pipeTo(download_write_stream);
}
Node.js:v18.7.0
2条答案
按热度按时间nc1teljy1#
问得好。Web流是一种新的东西,它们是处理流的不同方式。WritableStream告诉我们,可以按如下方式创建WritableStreams:
然后,您可以创建一个自定义流,将每个块写入磁盘。
uubf1zoe2#
您可以使用
Readable.fromWeb
将body
(来自web streams API的ReadableStream
)转换为可以与fs
方法一起使用的NodeJSReadable
流。请注意,
readable.pipe
会立即返回另一个流。要等待它完成,可以使用stream.finished
的承诺版本将其转换为Promise
,或者可以为'finish'
和'error'
事件添加侦听器以检测成功或失败。