无法看到http帖子[Angular4]

时间:2018-09-05 08:48:44

标签: angular typescript http-post

这应该很容易解决,但是我知道我找不到解决办法。

我有这样的帖子:

getAccordo(filtro: Filter): Observable<Response>  {
    return this.http.post<Response>(`${this.ENDPOINT}/export`,
        filtro,
        {observe: 'response', responseType: 'blob' as 'json'}   
    )
        .catch(error => this.handleError(error));
}

这是我使用它的地方:

  public getAccordo(event: any): any {debugger;
    event.preventDefault();
    this.accordiService.getAccordo(this.filter).subscribe(
      res => {debugger;
        const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
        const anchor = document.createElement('a');
        anchor.href = window.URL.createObjectURL(blob);
        anchor.download = Utils.extractHeaders(res);
        anchor.click();
      },
      error => {
        console.log(error);
      }
    );
  }

当我查看chrome控制台时,可以看到标题中有一个content-disposition: attachment; filename="esportazione_accordi_20180905.xlsx"

但是在我的“ res”中,这不见了。

Res

id想要做的是获取文件名并在anchor.download中使用它。

如果您需要其他帮助,谢谢您。

编辑

这是我从响应标头中获得的标头,我什至看不到其中的1个:

enter image description here

在服务器端我添加了.header("Access-Control-Expose-Headers", "content-disposition"),但仍然行不通

编辑2:

好的,我们越来越近了,我需要在图片末尾获取“文件名”值,并将其分配给anchor.download。

enter image description here

1 个答案:

答案 0 :(得分:3)

为了将此标头暴露到您的Angular XHR,服务器将需要设置Access-Control-Expose-Headers响应标头,以允许专门访问{{ 1}}标头。 docs拥有关于该主题的更多信息:

  

默认情况下,仅公开6个简单的响应标头:

     
      
  • 缓存控制
  •   
  • 内容语言
  •   
  • 内容类型
  •   
  • 到期
  •   
  • 最后修改
  •   
  • 编译指示
  •   
     

如果希望客户端能够访问其他标头,则必须使用Access-Control-Expose-Headers标头列出它们。

这意味着您的服务器需要设置以下标头:

Content-Disposition

在Angular中,使用Access-Control-Expose-Headers: Content-Disposition ,响应标头被延迟解析-要获取特定标头的值,您需要使用以下方法HttpClient标头这个:

get