如何以角度下载文件,该文件作为 application/octet-stream 接收

Posted

技术标签:

【中文标题】如何以角度下载文件,该文件作为 application/octet-stream 接收【英文标题】:How to download a file in angular, which is received as application/octet-stream 【发布时间】:2019-10-12 17:18:22 【问题描述】:

我正在创建一个网页,该网页必须下载 csv 格式的文件。 REST API 返回文件。

访问 Api 时出现错误。 我猜这是因为文件正在转换为 JSON。如何从后端获取并处理。

service.ts

return this.http.get(URL);             

【问题讨论】:

到目前为止你做了什么? Angular 6 CSV download的可能重复 【参考方案1】:

将八位字节流转换为任何所需的数据类型。 我有类似的情况,我将 OCTET-STREAM 转换为 pdf。

略有不同,可能对其他人有帮助,我收到了 json 响应,而 octet-stream Array 是该 json 响应中的一个字段。

在这种情况下,将 .pdf 替换为 .csv

octet_array 是八位字节值的数组。

  let arr = new Uint8Array(octet_array);
        let downloadLink = document.createElement('a');
        let b = new Blob([arr],  type: 'application/octet-stream' )
        downloadLink.href = window.URL.createObjectURL(b);
        downloadLink.setAttribute('download', "prescription.pdf");
        document.body.appendChild(downloadLink);
        downloadLink.click();
        downloadLink.parentNode.removeChild(downloadLink);

【讨论】:

【参考方案2】:

您可以使用file-saver

import * as FileSaver from 'file-saver';

this.http.post(url, resource,  responseType: 'blob' )
 .subscribe((resp: any) => 
    FileSaver.saveAs(resp, `filename.csv`)
 );

【讨论】:

如何从响应头中获取文件名?

以上是关于如何以角度下载文件,该文件作为 application/octet-stream 接收的主要内容,如果未能解决你的问题,请参考以下文章

在角度 5 / 6 中单击按钮时如何从 url 下载文件

以角度2导入文件问题

多部分/表单数据的 POSTMAN

如何使用 Angular 中浏览器的本机下载小部件以编程方式下载文件?

如何获取 url 以直接下载 github 版本?

如何以角度访问组件模板中的服务变量