Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# jquery ajax中的ASP.NET MVC FileContentResult下载文件_C#_Jquery_Asp.net_Asp.net Mvc_File - Fatal编程技术网

C# jquery ajax中的ASP.NET MVC FileContentResult下载文件

C# jquery ajax中的ASP.NET MVC FileContentResult下载文件,c#,jquery,asp.net,asp.net-mvc,file,C#,Jquery,Asp.net,Asp.net Mvc,File,在我看来,我使用ajax jquery对我的控制器进行GET调用,它返回一个FileContentResult,这是一个excel文件,它返回的是什么。该文件是即时创建的,它不在服务器上,我无法通过url下载该文件,因为它不存在 如果我从控制器返回FileContentResult,它对我有效,但在页面上,用户不知道下载何时完成或是否继续下载,我需要知道下载是否仍在进行中,以及下载是否已完成。我无法显示弹出窗口,因为我不知道下载是否继续,我只知道在我的浏览器中看到下载的文件时,该文件已被下载 控

在我看来,我使用ajax jquery对我的控制器进行GET调用,它返回一个FileContentResult,这是一个excel文件,它返回的是什么。该文件是即时创建的,它不在服务器上,我无法通过url下载该文件,因为它不存在

如果我从控制器返回FileContentResult,它对我有效,但在页面上,用户不知道下载何时完成或是否继续下载,我需要知道下载是否仍在进行中,以及下载是否已完成。我无法显示弹出窗口,因为我不知道下载是否继续,我只知道在我的浏览器中看到下载的文件时,该文件已被下载

控制器代码:

DataTable table = new DataTable("MyExcel");
string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.ContentType = contentType;
Response.AddHeader("Content-disposition", "attachment; filename=MyExcel.xlsx");
return File(Utils.XLS(table), contentType, "MyExcel.xlsx");

**Utils.XLS(table):** this function return byte[] from table
excel文件生成正确,我已检查

调用Ajax完成后,我检索数据并执行以下操作:

$.get(url, function (data, status, xhr) {
    var contentType = xhr.getResponseHeader("Content-Type");
    var filename = xhr.getResponseHeader("Content-disposition");
    filename = filename.substring(filename.lastIndexOf("=") + 1);
    var blob = new Blob([data], {
             type: contentType
    );
    var url = URL.createObjectURL(blob);
    var link = document.createElement('a');
    link.href = url;
    link.download = filename;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
});
excel文件下载成功,但似乎已损坏,其中不包含任何信息。 我已经尝试了很多我一直在寻找的方法,但没有一种对我有效

解决方案

在ajax请求的请求中,必须添加响应类型'arrayBuffer'

var xhrOverride = new XMLHttpRequest();
xhrOverride.responseType = 'arraybuffer';

$.ajax({
     url: url,
     method: 'POST',
     xhr: function () {
          return xhrOverride;
     }
}).done(function (data, status, xhr) { 
   //request correct
}

你可以在这里找到答案,不要把答案作为你问题的一部分。这是一个问答网站,它遵循特定的格式。如果您找到了答案,请将其单独添加到下面的答案部分。通过这种方式,人们可以对答案进行投票,并在搜索结果中显示。另请参阅,谢谢。我没有15%的声誉,根据您给我的链接,我需要15%的声誉才能为我的问题添加我自己的答案。这就是为什么我在这个问题上添加了我自己的答案。你可以在这里找到答案。不要添加答案作为你问题的一部分。这是一个问答网站,它遵循特定的格式。如果您找到了答案,请将其单独添加到下面的答案部分。通过这种方式,人们可以对答案进行投票,并在搜索结果中显示。另请参阅,谢谢。我没有15%的声誉,根据您给我的链接,我需要15%的声誉才能为我的问题添加我自己的答案。这就是为什么我对这个问题增加了我自己的答案。