我正在尝试在MVC 2中实现Open XML Excel电子表格的文件下载链接。如果我直接写入Response,它的工作原理如下......
var data = MooseMartAdoManager.ExecuteSet("Report.StagAllCasesFullDetail");
var str = ExcelExportManager.GenerateSpreadsheet(data) as MemoryStream;
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader(
"content-disposition",
"attachment;filename=StagFullDetail" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss") + ".xlsx");
str.WriteTo(Response.OutputStream);
但是,由于我花了很多时间来抽象出关于如何收集数据以及为代码重用和IOC创建报告的所有逻辑,所以能够弄清楚为什么这个剂量工作会很好...
public FileStreamResult GetExcelDetailExport()
{
var data = MooseMartAdoManager.ExecuteSet("Report.StagAllCasesFullDetail");
var file = ExcelExportManager.GenerateSpreadsheet(data);
return File(file, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"StagFullDetail" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss") + ".xlsx");
}
我得到的只是txt格式的零字节文件。
那么处理这个问题的“正确”MVC方法是什么?
答案 0 :(得分:2)
您可能遇到此问题的一个原因是此处的file
位于流的末尾:
var file = ExcelExportManager.GenerateSpreadsheet(data); // it is at the end of stream
我建议你设置为0:
file.Position = 0;
您之前的代码有效,因为您使用忽略当前位置的str.WriteTo
。