2013-03-22 51 views
3

我爲C#.net項目使用FileHelpers庫。所有工作正常,除了我需要通過點擊按鈕來保存生成的CSV。asp.net filehelpers直接向客戶端寫文件

因此,用戶點擊一個按鈕,他們得到一個提示保存文件。我知道Filehelpers有一個WriteStream選項,但他們自己的文檔只顯示了WriteFile的一個例子。我不知道是否需要WriteStream,但我認爲它是必需的。

任何人都知道是否可以將CSV文件直接保存到客戶端而不是服務器硬盤上?

謝謝。更多的細節

UPDATE:

我會盡量給更多的細節,以幫助澄清它就是我想要的目的。我不想在服務器上保存任何文件。我正在使用FileHelpers生成一條記錄,並且我想嘗試使用它們的WriteStream方法將該記錄直接寫入CSV到他們的瀏覽器;但他們提供的例子實際上並沒有實際使用這種方法,奇怪。

這裏的鏈接到他們的方法:

http://www.filehelpers.com/FileHelpers.FileHelperEngine.WriteStream_overload_2.html

而這裏的問題的方法。

public void WriteStream(
    TextWriter writer, 
    IEnumerable records, 
    int maxRecords 
); 

我可以輕鬆地將文件保存到服務器,但不希望因爲我已經不再需要它,並希望獲取客戶端直接將其保存到自己的機器。

這可能是我必須通過正常的路線來實現這一目標,但我看到了WriteStream方法,並認爲FileHelpers可能會促成一種很好的乾淨方式來實現相同的結果。

希望這個更清楚。

+0

您可以發佈工作代碼,您目前有保存文件不應該是一個問題,但它真的很難確定您正在嘗試執行什麼,而無需查看當前代碼。如果這是'ASP'。net'應用程序,那麼你希望你使用'響應對象'以及'StreamWriter類' – MethodMan 2013-03-22 15:07:33

+0

我真的沒有任何代碼(在這個階段已經寫入和刪除了一千次)。我想要做的是點擊按鈕,通過瀏覽器將CSV文件返回給用戶。我可以將它保存到服務器沒有問題,但獲取相當於Response.TransmitFile()的工作,而不必保存文件已經避開了我。希望這更清楚。 – 2013-03-22 15:12:17

+0

你仍然可以做到這一點,你需要使用'Response'來做到這一點,你可以參考它是非常直接的鏈接http://stackoverflow.com/questions/10974930/how-to-save-created-excel-file- to-client-pc-in-asp-net將'Response.ContentType =「application/ms-excel」;'改爲'Response.ContentType =「application/text」;'或'Response.ContentType =「text/csv 「;' – MethodMan 2013-03-22 15:15:20

回答

2

你應該能夠做到像下面這樣:

Response.ContentType = @"application/x-msdownload"; 
Response.AppendHeader("content-disposition", "attachment; filename=" + FILE_NAME); 

Response.Write(csv.ToString()); 
Response.Flush(); 
Response.End(); 

有很多在計算器上更詳細的建議,如this one。這取決於你想要達到的目標。

編輯

我認爲你缺少的步驟是:

MemoryStream stream = new MemoryStream(); 
StreamWriter streamWriter = new StreamWriter(stream); 
engine.WriteStream(streamWriter, records); 
stream.Position = 0; 

,然後你可以在我的第一個例子以上使用

StreamReader reader = new StreamReader(stream); 
Response.Write(reader.ReadToEnd); 

,而不是Response.Write(csv.ToString())

+0

謝謝,編輯了我的原始問題,使其更清楚我想達到的目標。 – 2013-03-22 15:33:42

+0

我編輯了我的答案。希望有所幫助。 – shamp00 2013-03-22 16:29:09

0

別忘了齊平 StreamWriter。見示例

public MemoryStream CreateCsvFileAsMemoryStream(List<TestItem> testItems) { 
     var engine = new FileHelperEngine<TestItemCsvMapping>(); 
     var items = testItems.Select(ti => (TestItemCsvMapping)ti).ToList(); 

     engine.HeaderText = engine.GetFileHeader(); 
     var ms = new MemoryStream(); 
     var sw = new StreamWriter(ms); 
     engine.WriteStream(sw, items); 
     sw.Flush(); 

     //var reader = new StreamReader(ms); 
     //ms.Position = 0; 
     //Console.Write(reader.ReadToEnd()); 

     ms.Position = 0; 

     return ms; 
    }