javascript - 使用 Ajax/Axios 时从 FileStreamResult 获取文件名?

标签 javascript ajax asp.net-core axios filestreamresult

我在我的 asp.net 核心 api Controller 中有

 return new FileStreamResult(excel, "application/ms-excel")
        {
            FileDownloadName = filename
        };

我正在做一个ajax请求来获取这个文件
   var response = axios.get(
      `/endpoint`, {
        responseType: 'blob'
      });

然后我正在使用一个名为 download 的库它需要 3 个参数,其中一个是“文件名”,我想知道是否可以以某种方式获取来自服务器的文件名。
download(response.data,"test.xlsx", content);

科尔斯
 services.AddCors(options => options.AddPolicy("Cors",
       builder =>
       {
           builder.AllowAnyOrigin()
           .AllowAnyMethod()
           .AllowAnyHeader();
       }));

最佳答案

首先你需要暴露Content-Disposition您的 CORS 配置中的 header ,因为它不包含在 CORS-safelisted response headers

services.AddCors(options => options.AddPolicy("Cors",
    builder =>
    {
        builder.AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader()
            .WithExposedHeaders("Content-Disposition");
    }));

然后你应该能够解析响应 Content-Disposition header 并从中获取文件名
axios.get(
    "/endpoint", {
        responseType: 'blob'
    })
    .then(response => {
        var contentDisposition = response.headers["content-disposition"];
        var match = contentDisposition.match(/filename\s*=\s*"(.+)"/i);
        var filename = match[1];
        console.log(filename);
    });

关于javascript - 使用 Ajax/Axios 时从 FileStreamResult 获取文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59274629/

相关文章:

php - MySQL查询插入成功但返回false

c# - 在 azure windows VM (C#/.NET5.0) 上托管服务时,无法将 websocket 与 SignalR 结合使用

javascript - 为什么在asp.net core中实现pjax时Request.Headers ["X-PJAX"]总是为空?

JavaScript、图像和 css 不会通过 HTTPS 在 Firefox 中加载

javascript - 如何使用 FB.ui Javascript sdk 在 facebook 上上传视频

javascript - 如何检查以确保在React中单击按钮时填写表格?

c# - 给定目录中的 ASP.Net core 1 列表文件

javascript - 弹出 Mapbox GL JS 中的一行,需要填充或近似鼠标悬停

javascript - 是否可以使用 JavaScript 直接进入打印过程而不加载 html 页面?

php - 使用时间定义语言