【发布时间】:2017-11-12 15:26:39
【问题描述】:
我正在构建一个 FileResult 方法,该方法应该返回一个 excel 文件作为结果。 目前该方法如下所示:
public ActionResult GetExcelFile(int id)
{
var entityPermission = AuthenticationManager.GetEntityPermission(PermissionEntity.Events, PermissionLevel.AllRecords);
if (entityPermission == null || !entityPermission.AllowRead)
return Json(new RequestResult(RequestCode.Unauthorized), JsonRequestBehavior.AllowGet);
try
{
using (var serviceManager = new ServiceManager())
{
// Get object model
var firstTableObj = serviceManager.GetDataForExcel(id);
StringBuilder sb = new StringBuilder();
sb.Append("<table border=`" + "1px" + "`b>");
sb.Append("<tr>");
// ... appending other strings and data
sb.Append("</table>");
// Return FileResult
byte[] byteArray = Encoding.UTF8.GetBytes(sb.ToString());
return File(new MemoryStream(byteArray, 0, byteArray.Length), "application/octet-stream", $"{firstTableObj.CurrentDate}.xlsx");
}
}
catch (Exception ex)
{
return Json(new RequestResult(RequestCode.Server_Failure, ex.Message), JsonRequestBehavior.AllowGet);
}
目前,当我从 Angular 2+ 前端发送请求时,正在处理并返回请求,这是一些标头数据:
Content-Disposition:attachment; filename=12.11.2017.xlsx, Content-Length:617, Content-Type:application/octet-stream
但是,该文件没有被下载,响应正文只是字符串格式的 html 模板。我错过了什么?我已经看到了一些在 MVC 中将 excel 文件作为 FileResult 返回的示例,它们与我的没有太大区别。将 MIME 更改为“application/vnd.ms-excel”也无济于事。另外,据我所知,不需要在客户端实现任何文件下载逻辑,它应该按原样工作,即来自服务器的响应。 将不胜感激有关该主题的任何提示。
P.S:我知道一般情况下我不应该将整个文件加载到内存中,但这目前是出于测试目的(我知道返回文件大小的近似限制)并且在未来的开发中肯定会改变。
【问题讨论】:
-
您正在返回 HTML,而不是 XLSX。
标签: c# asp.net asp.net-mvc excel