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

Cod*_*tor 5 javascript browser download

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

我通过使用 url 创建一个锚元素,然后使用 javascript 调用其上的单击事件来完成此操作。

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();
}
Run Code Online (Sandbox Code Playgroud)

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

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

有办法做到这一点吗?

为什么浏览器取消请求?

mis*_*ude 7

\n

为什么浏览器取消请求?

\n
\n\n

因为在浏览器完全完成您单击上一个链接时必须执行的操作之前,您实际上是通过单击下一个链接来“取消导航”。

\n\n

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

\n\n

我不认为\xe2\x80\x99t 认为你可以对此做很多事情,如果你不想找出一个超时的“神奇数字”,以某种方式使其“工作” - 特别是因为你赢了\xe2\x80 \x99不知道这是否一般有效,或者可能仅在您的计算机上,通过您的互联网连接等。

\n\n
\n

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

\n
\n\n

您可以将这些选定的文件动态地封装到服务器上的容器格式中 - 例如 ZIP(严格来说,不仅仅是一个“容器”),这样用户只需下载一个文件然后他们将下载该文件)必须在自己的机器上再次解压。)

\n\n

或者您首先更改文件选择过程。与其让用户使用复选框或类似的东西标记他们想要的文件,不如向他们提供指向文件的直接链接?然后他们可以依次单击他们想要的每一个,然后就会发生“正常”下载功能。

\n