streamsaver和fetch实现流式下载transfer-encoding chunked
要使用Streamsaver和Fetch来实现流式下载transfer-encoding chunked,首先需要创建一个可写的流,并将其传递给Fetch API作为请求的body。然后,将response的body分段读取,并将每个分片写入可写流中。
以下是一个示例代码:
// 创建一个可写流
const writableStream = new WritableStream();
// 使用Fetch API发送请求
fetch('http://example.com/stream', {
method: 'GET',
headers: {
'Accept-Encoding': 'chunked'
},
body: writableStream
}).then(response => {
// 从response获取可读流
const readableStream = response.body;
// 创建一个reader来读取response的body
const reader = readableStream.getReader();
// 定义一个递归函数来读取和写入分片
function readAndWrite() {
reader.read().then(({ done, value }) => {
if (done) {
// 读取完成,关闭可写流
writableStream.close();
return;
}
// 将分片写入可写流
writableStream.write(value);
// 继续读取和写入下一个分片
readAndWrite();
});
}
// 开始读取和写入分片
readAndWrite();
});
在上面的代码中,我们首先创建了一个可写流writableStream
,然后使用Fetch API发送一个GET请求,并将可写流作为请求的body。在收到response后,我们通过response.body
获取到一个可读流readableStream
。接下来,我们使用readableStream.getReader()
创建一个reader来读取response的body。
然后,我们定义了一个递归函数readAndWrite
来读取和写入分片。在每次读取分片后,我们将其写入可写流writableStream
中。如果读取完成,我们关闭可写流。
最后,我们调用readAndWrite
函数来开始读取和写入分片。
这样,通过Streamsaver和Fetch的组合,我们就可以实现流式下载transfer-encoding chunked
原文地址: http://www.cveoy.top/t/topic/h0oZ 著作权归作者所有。请勿转载和采集!