我正在尝试使用角度为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)
答案 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);
});
});
}