gpt4 book ai didi

javascript - 使用获取流的可恢复下载器

转载 作者:行者123 更新时间:2023-12-03 07:33:08 24 4
gpt4 key购买 nike

我正在尝试创建一个仅基于客户端的可恢复文件下载器。服务器超出了我的控制范围,在 ajax 请求中我得到了一个非常非常大的二进制数据文件 (100mgb)。

经过长时间的研究,我了解到我无法使用 xhr 元素来流式传输响应,并且在文件完全缓存之前我无法读取文件的 block ...所以我又看了一些,发现了相当新的 fetch api但我找不到任何合适的文档或教程。如果有人能说明一个获取某些 url 并逐 block 读取流的简单示例,我将非常感激

最佳答案

这是来自 this blog post 的示例:

fetch('/big-data.csv').then(function(response) {
var reader = response.body.getReader();
var partialCell = '';
var returnNextCell = false;
var returnCellAfter = "Jake";
var decoder = new TextDecoder();

function search() {
return reader.read().then(function(result) {
partialCell += decoder.decode(result.value || new Uint8Array, {
stream: !result.done
});

// Split what we have into CSV 'cells'
var cellBoundry = /(?:,|\r\n)/;
var completeCells = partialCell.split(cellBoundry);

if (!result.done) {
// Last cell is likely incomplete
// Keep hold of it for next time
partialCell = completeCells[completeCells.length - 1];
// Remove it from our complete cells
completeCells = completeCells.slice(0, -1);
}

for (var cell of completeCells) {
cell = cell.trim();

if (returnNextCell) {
reader.cancel("No more reading needed.");
return cell;
}
if (cell === returnCellAfter) {
returnNextCell = true;
}
}

if (result.done) {
throw Error("Could not find value after " + returnCellAfter);
}

return search();
})
}

return search();
}).then(function(result) {
console.log("Got the result! It's '" + result + "'");
}).catch(function(err) {
console.log(err.message);
});

请注意,并非所有浏览器都支持流式响应,请检查 compatibility table on MDN .

关于javascript - 使用获取流的可恢复下载器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35730961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com