【发布时间】:2019-06-12 03:11:28
【问题描述】:
我正在尝试下载通过 MVC 应用程序中的网页输入的数据生成的 excel 文件。
当按下按钮时执行此 ajax 调用,并在我的控制器中调用两个方法。一个生成excel文件,另一个下载文件:
$.ajax({
type: 'POST',
data: myDataObject,
url: 'MyController/GenerateExcel/',
success: function(data) {
if (data.id != "") {
$http.get('MyController/DownloadExcel?id=' + encodeURIComponent(data.id) + '&name=' + encodeURIComponent(data.name));
return true;
}
}
});
这是我生成 excel 文件并将其保存到 TempData 的 POST 方法:
[HttpPost]
public JsonResult GenerateExcel(Object model)
{
var fileName = "myexcel.xlsx";
var fileID = Guid.NewGuid().ToString();
var generatedReport = GenerateCustomExcel(model);
using (MemoryStream memoryStream = new MemoryStream())
{
generatedReport.SaveAs(memoryStream);
generatedReport.Dispose();
memoryStream.Position = 0;
TempData[fileID] = memoryStream.ToArray();
}
return Json(new { id = fileID, name = fileName });
}
这是我从 TempData 下载保存的 excel 的 GET 方法:
[HttpGet]
public FileResult DownloadExcel(string id, string name)
{
if (TempData[id] != null)
{
byte[] fileBytes = TempData[id] as byte[];
return File(fileBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", name);
}
else
{
return null;
}
}
这在 Google Chrome 和 Firefox 浏览器中完美运行。但是,当使用 Internet Explorer 或 Microsoft Edge 浏览器时,文件会拒绝下载。
调试控制台不会产生任何有用的错误。我尝试将返回的文件类型更改为八位字节流并使用 window.location.href 而不是获取请求来下载文件,但似乎没有任何效果。所有的函数都被调用并且数据在它们之间正确传递,所以路由不是问题。
有谁知道如何下载返回的 FileResult?
【问题讨论】:
-
这可能会有所帮助,虽然接受的答案仅适用于 PDF,但您可能能够适应您的情况:stackoverflow.com/questions/9996353/…
标签: javascript c# asp.net-mvc