多个文件下载无法在Firefox中下载所有文件,锚定点击问题

时间:2019-04-07 09:03:10

标签: angular typescript firefox download anchor

我正在尝试使用角度为6的打字稿下载多个文件,从Web API服务中获取了一个Blob数组。

获取多个Blob的服务,我需要下载文件:

 private downloadTest(): void {
    this.downloadService$().subscribe((blobs: Blob[]) => {
        blobs.forEach((blob: Blob, index: number) => {
            FileDownloader.startDownload(blob);
        });
    });
}

在一个循环中,我正在调用startDownload方法来下载文件,如下所示:

  export class Downloader {
        public static startDownload(blob: Blob): void {
            blob = new Blob([blob], { type: "type of file" });
            const url = window.URL.createObjectURL(blob);
            const anchor = document.createElement("a");
            document.body.appendChild(anchor);
            anchor.download = "fileName";
            anchor.target = "_blank";
            anchor.href = url;        
            anchor.click();
            document.body.removeChild(anchor);
            window.URL.revokeObjectURL(url);
    }    
}

上面的代码在Chrome中工作正常,但是,在Firefox中,执行锚点单击时,它会中断循环,并且不会下载文件的其余部分,

当我删除了anchor.download =“ fileName”;也会在firefox中下载文件,但是打开并关闭新标签页。另外,文件名将是随机的。

我尝试了很多事情,但没有任何效果。

我只是想以指定的文件名将文件作为一个循环下载为另一个文件。

谢谢。

关于, 拉吉·沙尔玛(Raj Sharma)

1 个答案:

答案 0 :(得分:0)

我尝试了许多在Firefox中工作的方法,最后我增加了每个Downlaod的超时时间,以使一个下载不会影响另一个下载。 可能是对某人的帮助。

private downloadTest(): void {
    this.downloadService$().subscribe((blobs: Blob[]) => {
 let intervalTimeOut = 0;
                blobs.forEach(function (blob, index): void {
                    setTimeout(function (): void {
                        startDownload(blob, fileInfos[index]);
                    }, intervalTimeOut += 100);
                });
    });
}