【问题标题】:How can i get file name inside "content-disposition" from a Response headers?如何从响应标头中获取“内容处置”内的文件名?
【发布时间】:2018-08-16 14:09:18
【问题描述】:

标头在内容配置中发送 filename="name.xlsx" 但我如何将该名称设置为我正在下载的文件?

component.ts:

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

        anchor.click(); 
      },
      error => {
        console.log(error);
      }
    );
  }

服务.ts

getAccordo(filtro: Filter) {

return this.http.post<any>(
    `${this.ENDPOINT}/export`,

    filter,

    {responseType : 'blob' as 'json'}

);}

【问题讨论】:

    标签: angular typescript http-post


    【解决方案1】:

    要从响应中获取headers,您需要在HttpOptions 中设置{observe: 'response'} 参数。

    this.http.post<any>(`${this.ENDPOINT}/export`, filter, {
         responseType : 'blob' as 'json',
         observe: 'response'
    })
    

    然后在subscribe 函数中,您可以通过headers 属性获取标题。获取名称您现在可以设置文件的名称。

    【讨论】:

    • 我使用了 observe: 'response' 但是如果我把它放在我的帖子中,当我打开 excel 文件时它会说“文件已损坏或扩展名错误”,而没有它它可以正常工作:)
    • 您需要访问响应的正文。也许您还需要手动解析为 json
    猜你喜欢
    • 2017-04-17
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多