浏览器正在取消多个文件下载请求

时间:2018-08-28 06:21:36

标签: javascript browser download

我正在尝试下载用户已选择下载的多个文件。但是,浏览器将取消除上一次下载请求外的所有请求。如果我将请求之间的延迟增加到大约1秒,那么将下载那些文件,但是即使在这种情况下,有时也会丢失一些文件。这些文件是从Amazon s3网址下载的(即这些是CORS)。

我是通过使用url创建锚元素,然后使用javascript对其调用click事件来实现的。

downloadFile(url) {
    let a = document.createElement('a');
    a.id = url;
    // a.setAttribute('target', 'blank');
    a.download = '';
    a.href = url;
    // firefox doesn't support `a.click()`...
    // console.log('dowmloading ' + url);
    a.dispatchEvent(new MouseEvent('click'));
    a.remove();
}

然后点击下载按钮点击事件,我正在这样做:

let delay = 0;
        urlList.forEach(url => {
            return setTimeout(downloadFile.bind(null, url), 100 * ++delay);
        });

有没有办法做到这一点?

浏览器为什么取消请求?

1 个答案:

答案 0 :(得分:2)

  

浏览器为什么取消请求?

因为本质上是通过单击下一个链接来“取消导航”,所以在浏览器完全完成单击前一个链接时的操作之前就可以了。

如果这不是下载内容,而是常规的指向页面的链接,那么这就是您的想要的行为-如果用户先单击指向页面A的链接,然后失去耐心,然后单击另一个链接到页面B,则对页面A的请求将被取消-无需加载两个资源,因为无论如何只能同时显示一个资源。

如果您不想弄清楚超时以某种方式使其“起作用”的“幻数”,我认为您无能为力,尤其是因为您不知道是否可以做到这一点可以正常工作,或者可以在您的计算机上,通过Internet连接等运行。

  

我正在尝试下载用户选择下载的多个文件。

您可以在服务器上动态地将那些选择的文件包装成容器格式,例如ZIP(严格来说,不仅仅是一个“容器”),这样用户只需下载一个< / em>文件(然后他们将不得不在自己的计算机上重新解压缩文件)。

或者您可以从一开始就更改文件选择过程。与其让用户使用复选框或类似的方式标记所需的文件,不如向他们展示直接指向文件的链接?然后,他们可以依次单击想要的每个按钮,然后将执行“正常”下载功能。