在Angular 8中从web.api下载文件时从服务器获取文件名

PNR

我从Angular 8应用程序中的web.api(.net核心)获取文件,但是我无法从服务器获取文件名...如果我在Fiddler中查看响应,则可以看到响应头(Content-Disposition)中的文件名。

我在服务中使用以下方法:

public getAsCsv(taskId: number): Observable<HttpResponse<Blob>> {
    return this.httpClient.get<Blob>(`${this.apiBaseUrl}/getAsCsv/${taskId}`, {
        observe: 'response',
        responseType: 'blob' as 'json'
      });
}

在我的组件中,我有以下代码:

 public export(taskSmall: TaskSmall) {
    this.taskApiService.getAsCsv(taskSmall.id).subscribe((resp: HttpResponse<Blob>) => {
        console.log(resp.headers.get('Content-Disposition')); // is writing null in the console
        const filename = resp.headers.get('Content-Disposition');
        saveAs(resp.body, filename);
    });
}

我的Web API方法如下所示:

   [HttpGet("getAsCsv/{taskId}")]
    [Authorize(Roles = RoleConstants.Admin)]
    public async Task<IActionResult> GetAsCsv(int taskId)
    {
        var result = await _mediator.Send(new GetTaskAsCsvCommand(taskId), CancellationToken.None);

        byte[] byteArray = Encoding.ASCII.GetBytes(result.Value);

        var response = File(byteArray, "application/csv");
        response.FileDownloadName = "something.csv";
        return response;
    }

如果我尝试从标题中获取参数“ Content-Type”,它将显示正确的值(application / csv)。

我究竟做错了什么?

更新感谢@Plochie,我最终做到了:

API:

 [HttpGet("getAsCsv/{taskId}")]
    [Authorize(Roles = RoleConstants.Admin)]
    public async Task<IActionResult> GetAsCsv(int taskId)
    {
        var result = await _mediator.Send(new GetTaskAsCsvCommand(taskId), CancellationToken.None);

        byte[] byteArray = Encoding.ASCII.GetBytes(result.Value);

        Response.Headers.Add("x-file-name", "something.csv");
        Response.Headers.Add("Access-Control-Expose-Headers", "x-file-name");

        return File(byteArray, "application/csv"); ;
    }

客户:

    public export(taskSmall: TaskSmall) {
    this.taskApiService.getAsCsv(taskSmall.id).subscribe((resp: HttpResponse<Blob>) => {
        saveAs(resp.body, resp.headers.get('x-file-name'));
    });
}
lo

发送响应时,您可能尚未公开此标头。您的服务器需要发送Access-Control-Expose-Headers标头,以便您的标头公开给客户端。

在这里,您可以公开Content-Disposition标题或x-file-name使用文件名作为值创建自己的自定义标题,然后公开此自定义标题。

说明文件:

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Access-Control-Expose-Headers

[HttpGet("getAsCsv/{taskId}")]
[Authorize(Roles = RoleConstants.Admin)]
public async Task<IActionResult> GetAsCsv(int taskId)
{
   var result = await _mediator.Send(new GetTaskAsCsvCommand(taskId), CancellationToken.None);

   byte[] byteArray = Encoding.ASCII.GetBytes(result.Value);

   Response.Headers.Add("x-file-name", "something.csv");
   Response.Headers.Add("Access-Control-Expose-Headers", "x-file-name");

   return File(byteArray, "application/csv", "something.csv"); ;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python FTP服务器下载文件名中包含特定关键字的最新文件

来自分类Dev

如何从服务器请求中获取文件名?

来自分类Dev

如何从服务器请求中获取文件名?

来自分类Dev

如何使用PowerShell的FtpWebRequest类从FTP服务器下载文件名中包含井号/井号'#'的文件

来自分类Dev

文件名中带有逗号 (",") 的 Express 服务器文件下载

来自分类常见问题

在React中如何从服务器下载文件?

来自分类Dev

在React中如何从服务器下载文件?

来自分类Dev

如何从Spring Integration ftp中的服务器下载以“ xyz”开头的文件名?

来自分类Dev

使用FtpWebResponse下载文件-即使从ftp服务器中删除文件,也可以下载文件?

来自分类Dev

使用FtpWebResponse下载文件-即使从ftp服务器中删除文件,也可以下载文件?

来自分类Dev

下载文件之前如何从链接中获取文件名?

来自分类Dev

尝试通过 Web api 调用下载文件时,如何解决“发送 HTTP 标头后服务器无法设置状态”错误?

来自分类Dev

Web 服务器虚拟文件名

来自分类Dev

当文件位于其他服务器上时,使用ASP.Net MVC在浏览器中强制下载文件,而无需先在我的服务器上下载文件

来自分类Dev

expressjs下载文件名utf-8

来自分类Dev

我想从服务器下载文件,并在Android中以各种文件扩展名(例如(pdf,doc,mp4,jpeg))查看文件

来自分类Dev

Angular Http客户端文件下载-响应中的文件名

来自分类Dev

从AngularJS的服务器下载文件时如何更改文件名

来自分类Dev

为什么使用 AJAX 下载文件会冻结整个 PHP Web 服务器?

来自分类Dev

如何从Angular App中的服务器获取API数据?

来自分类Dev

从Angular JS中的Web API下载csv文件

来自分类Dev

python web服务器如何识别url中没有文件名?

来自分类Dev

Ubuntu Web 服务器,如何在网址中隐藏文件名

来自分类Dev

如何在Python中从本地服务器下载文件

来自分类Dev

使用 Python 中的 Paramiko 从远程命令列出的 SFTP 服务器下载文件

来自分类Dev

如何从服务器下载文件并在 Node.js 中同步重命名?

来自分类Dev

如何在 PHP 中获取当前服务器路径、url 域、文件名或脚本名称

来自分类Dev

在Jhipster(java + angular)的下载过程中如何更改文件名

来自分类Dev

plesk服务器文件上的文件名中的%2B未显示

Related 相关文章

  1. 1

    Python FTP服务器下载文件名中包含特定关键字的最新文件

  2. 2

    如何从服务器请求中获取文件名?

  3. 3

    如何从服务器请求中获取文件名?

  4. 4

    如何使用PowerShell的FtpWebRequest类从FTP服务器下载文件名中包含井号/井号'#'的文件

  5. 5

    文件名中带有逗号 (",") 的 Express 服务器文件下载

  6. 6

    在React中如何从服务器下载文件?

  7. 7

    在React中如何从服务器下载文件?

  8. 8

    如何从Spring Integration ftp中的服务器下载以“ xyz”开头的文件名?

  9. 9

    使用FtpWebResponse下载文件-即使从ftp服务器中删除文件,也可以下载文件?

  10. 10

    使用FtpWebResponse下载文件-即使从ftp服务器中删除文件,也可以下载文件?

  11. 11

    下载文件之前如何从链接中获取文件名?

  12. 12

    尝试通过 Web api 调用下载文件时,如何解决“发送 HTTP 标头后服务器无法设置状态”错误?

  13. 13

    Web 服务器虚拟文件名

  14. 14

    当文件位于其他服务器上时,使用ASP.Net MVC在浏览器中强制下载文件,而无需先在我的服务器上下载文件

  15. 15

    expressjs下载文件名utf-8

  16. 16

    我想从服务器下载文件,并在Android中以各种文件扩展名(例如(pdf,doc,mp4,jpeg))查看文件

  17. 17

    Angular Http客户端文件下载-响应中的文件名

  18. 18

    从AngularJS的服务器下载文件时如何更改文件名

  19. 19

    为什么使用 AJAX 下载文件会冻结整个 PHP Web 服务器?

  20. 20

    如何从Angular App中的服务器获取API数据?

  21. 21

    从Angular JS中的Web API下载csv文件

  22. 22

    python web服务器如何识别url中没有文件名?

  23. 23

    Ubuntu Web 服务器,如何在网址中隐藏文件名

  24. 24

    如何在Python中从本地服务器下载文件

  25. 25

    使用 Python 中的 Paramiko 从远程命令列出的 SFTP 服务器下载文件

  26. 26

    如何从服务器下载文件并在 Node.js 中同步重命名?

  27. 27

    如何在 PHP 中获取当前服务器路径、url 域、文件名或脚本名称

  28. 28

    在Jhipster(java + angular)的下载过程中如何更改文件名

  29. 29

    plesk服务器文件上的文件名中的%2B未显示

热门标签

归档