Angular 如何在“新建”选项卡中使用自定义名称从http打开通过blob响应生成的文件

Angular 如何在“新建”选项卡中使用自定义名称从http打开通过blob响应生成的文件,angular,download,blob,Angular,Download,Blob,我需要从后端服务获取blob响应,处理该响应,并在新选项卡中使用自定义名称打开文件。这是我到目前为止编写的代码: HTTP请求 返回this.http.get(url,{responseType:'blob'}); 处理响应 constblob=newblob([fileResponseData],{type:'application/pdf'}); const fileName=this.getFileName(); //IE浏览器 if(window.navigator&&window.n

我需要从后端服务获取blob响应,处理该响应,并在新选项卡中使用自定义名称打开文件。这是我到目前为止编写的代码:

HTTP请求

返回this.http.get(url,{responseType:'blob'});
处理响应

constblob=newblob([fileResponseData],{type:'application/pdf'});
const fileName=this.getFileName();
//IE浏览器
if(window.navigator&&window.navigator.msSaveOrOpenBlob){
window.navigator.msSaveOrOpenBlob(blob,文件名);
返回;
}
//其他浏览器
constURL=window.url.createObjectURL(blob);
const link=this.renderer.createElement('a');
this.renderer.setAttribute(链接“下载”,文件名);
this.renderer.setAttribute(链接'href',url);
this.renderer.setAttribute(链接'target','u blank');
this.renderer.appendChild(this.elementRef.nativeElement,link);
link.click();
this.renderer.removeChild(this.elementRef.nativeElement,链接);
设置超时(()=>{
window.URL.revokeObjectURL(URL);
}, 1000);
虽然此解决方案会下载具有自定义名称的文件,但不会在“新建”选项卡中打开blob URL。该文件将在同一选项卡中下载

在研究了一些关于堆栈溢出的解决方案后,我发现如果你打开了广告拦截器,
target=\u blank
可能无法使用blob URL,我确实验证了这一点,而且我没有任何广告拦截器,但我无法在新选项卡中打开此文件

替代解决办法是:

consturl=window.url.createObjectURL(blob);
打开(url,“U空白”);
使用此解决方案,文件将在“新建”选项卡中打开,但我无法找到任何解决方法来为其指定自定义名称

我需要以下方面的帮助:

  • 单击-在选项卡中打开(blob)文件
  • 下载时-文件应具有自定义名称