我有一个应用程序,允许用户单击一个按钮即可下载两个生成的 csv 文件。只要浏览器设置设置为允许多次下载,此功能就可以在 Mac/Windows/Chrome、Mac/Windows/Firefox 和 Windows/Edge 中正常运行。
对于 Safari,我只能获取生成的第一个 csv 来下载。我尝试将该网站添加到允许下载文件的网站列表中(即https://9to5mac.com/2020/01/03/mac-how-to-always-allow-downloads-safari/)但它不会下载第二个文件。将文件压缩在一起是一种选择,但必须有一种方法允许在 Safari 中的某个地方进行多次下载。
我遇到了完全相同的问题,它在除 Safari 之外的所有其他浏览器中都有效。我最终采用的解决方案是在下载每个文件之间添加延迟。 (当然不是最好的解决方案)
在我的例子中,我使用 JavaScript 函数动态生成并触发下载按钮的点击(一种允许您命名 csv 文件的常用方法)
Safari 不喜欢每秒按下该按钮超过一次,它记录了数据存在并且所有内容都已更新,但它只触发了最后一次下载,在文件下载之间设置了延迟,为 Safari 提供了足够的时间处理应该下载多个文件。
@亚伦·麦奎尔 我尝试在我的情况下使用设置超时来添加延迟,但它也不起作用。
private downloadMultipleFiles(boardingPassURLs : string[]): void{
boardingPassURLs.forEach((url) => {
setTimeout(() => {
this.downloadFileService.downloadFileFromURL(url).subscribe((blob) => {
const a = document.createElement('a');
const objectUrl = URL.createObjectURL(blob);
a.href = objectUrl;
a.download = 'Volotea.pkpass';
a.click();
URL.revokeObjectURL(objectUrl);
});
},500);
});
this.checkinDetailsBoardingpassService.setIsBoardinpassLoaderVisible(false);
}
downloadFileFromURL(url: string) {
return this.http.get(url, { responseType: 'blob' });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.17/angular.min.js"></script>
您能建议一下如何解决这个问题吗? 或者我在这里做错了什么?