xml.gzip文件的下载不起作用

问题描述

我将下载带有响应的xml.gzip文件

缓存控制:无缓存,无存储,最大年龄= 0,必须重新验证

连接:保持活动状态

Content-disposition:附件; filename = ERKENNUNGSMODELL_CI.9.221_part_1_of_1.xml

内容编码:gzip

内容长度:1323

Content-MD5:fIHw5FJ1KWkBHsZ + jbkuwg ==

内容类型:application / xml

日期:星期四,2020年9月10日格林尼治标准时间

有效期:0

保持活动:超时= 60

编译指示:无缓存

严格的运输安全性:max-age = 31536000; includeSubDomains

X-Content-Type-Options:nosniff

X-XSS-Protection:1;模式=阻止

我的代码是:

download(url) {
let downloadHeaders = new HttpHeaders({ 'content-type': 'application/xml; charset=UTF-8','authorization': "Bearer " + localStorage.getItem('token') });
downloadHeaders.append('Access-Control-Allow-Origin','*');
this.httpClient.get('/rest/ui/download/product-part/' + url,{ headers: downloadHeaders }).subscribe(response => {
    console.log(response);
    this.downLoadFile(response,"application/xml");
  }
);

}

  downLoadFile(data: any,type: string) {
let blob = new Blob([data],{ type: type});
let url = window.URL.createObjectURL(blob);
let pwa = window.open(url);
if (!pwa || pwa.closed || typeof pwa.closed == 'undefined') {
  alert( 'Please disable your Pop-up blocker and try again.');
}

}

有 新的HttpHeaders({'content-type':'application / xml; charset = UTF-8','authorization':“ Bearer” + localStorage.getItem('token')});

在console.log中,文件正确显示。但是下载不起作用:“ myUrl”解析期间Http失败

解决方法

如前所述,您必须在获取选项中添加reponseType: 'blob'

这是我在一个应用程序中的处理方式,其中const data是从downloadAttachment返回的blob。这可能不是最干净的方法,但它可以工作。

  async downloadAttachment(id: number,filename: string) {
    const data = await this.front.downloadAttachment(id);
    const downloadURL = window.URL.createObjectURL(data);
    const link = document.createElement('a');
    link.target = '_blank';
    link.href = downloadURL;
    link.download = filename;
    link.click();
  }

检查是否有帮助。如有任何疑问,请在这里提问。