Angular 7 下载 blob 时文件损坏

Posted

技术标签:

【中文标题】Angular 7 下载 blob 时文件损坏【英文标题】:Angular 7 get corrupted file while downloading blob 【发布时间】:2020-03-15 00:44:57 【问题描述】:

使用 Angular 7,我通过发布 url 文件来调用 api,并尝试使用 fileSaver 库中的“saveAs”函数下载它。 文件正在下载,但无法打开,因为它已损坏

我的电话如下:

var file_url = (response as any).headers['Location'] + 'files/Data.xlsx';
var filename = 'Data_' + this.getDateService.getDateFile() + '.xlsx';

const httpOptions = 
          headers: new HttpHeaders(
            'Content-Type': 'application/x-www-form-urlencoded'
          ),
          responseType: 'arraybuffer',
          observe: 'response'
        ;

let downloadParameters =  filename: 'Data_' + this.getDateService.getDateFile() + '.xlsx', file: file_url 

this.downloadFileService.downloadFile(downloadParameters, httpOptions).subscribe(reponse => 

          var blob = new Blob([(response as any).body],  type: 'application/vnd.openxmlformat-officedocument.spreadsheetml.sheet' );
          saveAs(blob, filename);
)

我尝试了什么

通过 application/octet-stream 切换类型 MIME application/vnd.openxmlformat-officedocument.spreadsheetml.sheet 通过 blobblob as json 切换 responseType arraybuffer

下面是来自服务的响应头

文件存在于响应正文中

你们有什么线索吗?

【问题讨论】:

【参考方案1】:

试试这样:

this.downloadFileService.downloadFile(downloadParameters,  responseType: 'blob' ).subscribe(blob=> 
  saveAs(blob, filename);
)

【讨论】:

哇,谢谢,它确实有效。为什么它实际上在没有 httpHeaders 的情况下工作? 这里 responseType: 'blob' 这是http头。我没有存储在另一个变量中。如果您也对答案投赞成票,那就太好了:) 我写的是“响应”而不是“响应”。它通过纠正这个来工作。

以上是关于Angular 7 下载 blob 时文件损坏的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 从数据库下载“blob”类型文件。文件已损坏,无法查看文件内容

使用 REST API 上传到 Azure Blob 存储时,Zip 档案损坏

blob 上的错误内容类型无法打开 img / 文件已损坏

在移动设备上从 Angular 下载 Word .docx 作为 Blob 文件

如何从 Angular 6 中的 blob URL 下载音频文件?

在 vue 项目中使用 blob 和 FileSaver.js 下载 excel(.xlsx) 已损坏