当前位置: 首页 > 知识库问答 >
问题:

如何在Angular 8中下载excel文件作为API响应

澹台志诚
2023-03-14

我有一个API可以返回excel文档作为响应。请求将是一个简单的JSON。

我搜索了谷歌,找到了一些代码库下载文件,我已经在我的应用程序中使用了它,但我得到了一些错误,无法找到它的解决方案。下面是我的代码库。

import rxjs/Rx;

details = {id: 75,name: "some name"}

this.nameService.getData(this.details).subscribe(response => {
this.downloadFile(response);
})

downloadFile(data: Response) {
  const blob = new Blob([data], { type: '.xlsx' });
  const url= window.URL.createObjectURL(blob);
  window.open(url);
}

NameService.ts

getData(postData) {
  return this.httpService.post('https://localhost:8080/getFile/', postData);
}

HTTPService.ts

constructor(private http: HttpClient)
post(apiEndpoint: string, request: any) :Observable<any> {
 return this.http.post<any>(apiEndpoint,request);
}

使用上面的代码库,我得到了以下两个错误,文件没有下载。

    null

共有1个答案

都博裕
2023-03-14

>

  • 您需要在请求中设置response-header{responseType:'blob'}

    您需要在创建blob文件时传入正确的mime类型.(例如,application/octet-stream或application/vnd.openxmlformats-officedocument.spreadsheetml.sheet)。

    Component.ts

    downloadFile(data: Response) {
      const blob = new Blob([data], { type: 'application/octet-stream' });
      const url= window.URL.createObjectURL(blob);
      window.open(url);
    }
    

  •  类似资料:
    • 我正在使用AngularJS和Spring编写应用程序。我想向服务器发送请求,并下载控制器返回的响应作为文件。在控制器中,我有csv文件的内容(作为字符串),即<代码>1;2.3.4(1行4列)。将此响应下载为文件的最简单方法是什么? 下面,我发布了我的简化代码。Spring控制器: 在javascript中(AngularJS) 我还试图写入响应流(如下所示),设置标题,但在客户端,我总是以字符

    • 我正在使用Apache POI生成. xlsx文件。 我想从Spring controller返回该文件。以下是我到目前为止所做的: 控制器: 是否可以从rest控制器返回实际的excel文件,以便用户可以将其下载到计算机上?至于现在控制器返回字节[],但我想返回它的实际文件。我怎样才能做到这一点?

    • 问题内容: 这是其中的代码 返回的响应是一个文件。我希望用户能够将其保存为文件,但是什么也没有发生。我认为服务器返回的响应类型正确,因为在控制台中它说 我想念的是什么?我应该在减速器中做什么? 问题答案: 浏览器技术当前不支持直接从Ajax请求下载文件。解决方法是添加一个隐藏的表单并将其提交到幕后,以使浏览器触发“保存”对话框。 我正在运行标准的Flux实现,因此不确定确切的Redux(Reduc

    • 我正在使用Postman测试一个视图,该视图应该允许用户下载excel文件。这是视图。。 问题是,当我测试这个视图时,我无法从postman那里获得下载提示。相反,我从邮递员的回复中得到了损坏的数据。以下是一个示例输出: 为什么我不能下载文件?我错过了什么吗?

    • 我有一个API,它以所附图像中显示的格式为我提供响应。我曾尝试通过inputstreamresponse读取它,但这经常会给我带来损坏的文件错误。 所以计划通过json进行尝试。将下面的响应转换为json格式,然后从该响应中读取值。不知道如何采取初步措施。