2012-01-31 33 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

相關問題