我需要編寫一些報告,然後讓用戶提示將其保存到他/她的本地計算機。最後一次我這樣做,我寫了一個文件到網絡服務器,然後通過Response
對象發送給客戶端。C#Asp.net將文件寫入客戶端
創建web服務器上的
TextWriter tw = new StreamWriter(filePath);
發送到客戶端
page.Response.WriteFile(path);
的問題是,有沒有辦法跳過物理文件到Web服務器的寫入和右走的時候一個代表響應文檔的對象?
我需要編寫一些報告,然後讓用戶提示將其保存到他/她的本地計算機。最後一次我這樣做,我寫了一個文件到網絡服務器,然後通過Response
對象發送給客戶端。C#Asp.net將文件寫入客戶端
創建web服務器上的
TextWriter tw = new StreamWriter(filePath);
發送到客戶端
page.Response.WriteFile(path);
的問題是,有沒有辦法跳過物理文件到Web服務器的寫入和右走的時候一個代表響應文檔的對象?
您可以使用Response.ContentType這樣
Response.ContentType = "text/plain";
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.AddHeader("Content-Disposition", "attachment;filename=yourfile.txt");
,如果你想要寫一個文本文件,這當然工作。如果你想寫一個.doc文件,例如你將ContentType改爲「application/msword」等等。
您可以。
試試這個:
Table oTable = new Table();
//Add data to table.
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename="test.xls"");
Response.Charset = "";
this.EnableViewState = false;
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.Html32TextWriter oHtmlTextWriter = new System.Web.UI.Html32TextWriter(oStringWriter);
0Table.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();
這將給提示用戶打開或保存TEST.XLS文件。 同樣,您可以提供其他ASP.NET對象來代替表。
是的。
page.Response.WriteFile(yourData, 0, yourData.Length);
問題的確切答案取決於你如何組織你的報告(即你指的是什麼「對象」)。如果你有一個字符串,你可以使用Response.Write來寫它。如果你需要一個TextWriter,Response.Output就是你想要的 - 這樣你可以跳過寫入磁盤然後使用WriteFile。另外,如果你的內容碰巧是二進制的,你可以使用Response.OutputStream。
如果您希望用戶看到保存文件對話框,您可能還需要設置Response.AddHeader(「Content-Disposition」,「attachment」)。但是,Content-Disposition不一定是可以接受的,所以用戶仍然可以直接在瀏覽器中打開報告。請記住在輸出實際內容之前設置標題!
此外,根據報告的格式,您可能需要將Response.ContentType設置爲適當的內容,例如text/plain,text/csv或其他什麼。正確的MIME類型列於the IANA site。
你應該能夠使用Response.Output而不是創建一個StringWriter。 – Talljoe 2009-07-02 07:26:19
我有2個問題。 1)該文件是否可以恢復。和2)如果使用類似IDM等下載管理器,可以實現多種連接。 – shashwat 2013-03-02 18:57:40
@ShashwatTripathi我不確定。這是我長期使用的一段代碼。恕我直言,它不會支持簡歷或多個下載連接。 – 2013-03-02 19:05:59