0

我正在尝试构建一个刮板来下载视频流并将它们保存在使用 NightMareJs 的私有云实例中(http://www.nightmarejs.org/)

我已经看过文档,它显示了如何下载这样的简单文件 -

.evaluate(function ev(){
    var el = document.querySelector("[href*='nrc_20141124.epub']");
    var xhr = new XMLHttpRequest();
    xhr.open("GET", el.href, false);
    xhr.overrideMimeType("text/plain; charset=x-user-defined");
    xhr.send();
    return xhr.responseText;
}, function cb(data){
    var fs = require("fs");
    fs.writeFileSync("book.epub", data, "binary");
})

-- 基于此处的 SO 帖子->使用 Nightmare 下载文件

但我想使用 NodeJs 异步流 api 下载视频流。有没有办法使用 NodeJs 内置流 api 从远程 url 打开一个流并将其通过管道传输到本地/其他远程可写流

4

1 回答 1

0

您可以检查服务器是否通过 HEAD 请求向该文件发送“Accept-Ranges”(14.5)和“Content-Length”(14.13)标头,然后请求您尝试下载的文件的较小块使用“ Content-Range" ( 14.16 ) 标头并将每个块写入目标文件(您可以使用附加模式以减少对文件流的管理)。

当然,如果您按顺序请求非常小的块,这将非常慢。您可以建立一个请求者池(例如 4 个),并且只将下一个正确的块写入文件(因此,如果其他请求者已经完成下载,则它们将不会接收未来的块)。

于 2016-08-20T09:12:55.480 回答