4

我在我的 asp.net 核心 api 控制器中有

 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();
       }));
4

1 回答 1

5

首先,您需要Content-Disposition在 CORS 配置中公开标头,因为它不包含在CORS 安全列表的响应标头中

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

然后你应该能够解析响应Content-Disposition头并从中获取文件名

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);
    });
于 2019-12-10T21:58:52.427 回答