2012-01-31 36 views
0

我试图实现MVC 2文件下载链接,开放式XML Excel电子表格。如果我直接写它的工作原理如下响应...发送流方式浏览器作为附件在MVC 2

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方式来处理这个问题呢?

回答

2

一个原因,你可能会得到这样的问题是,这里的file位于流的末尾:

var file = ExcelExportManager.GenerateSpreadsheet(data); // it is at the end of stream 

我建议你设置为0:

file.Position = 0; 

你以前的代码因为您使用str.WriteTo,因此忽略当前位置。

+0

不错的,谢谢:) – 2012-01-31 14:00:22

相关问题