一、向客戶端發送文件方法
Asp.Net 中返回文件方法
public void TxtFile(string filename) { //html文件 string path = @"E:\Win10桌面\" + filename; Response.ContentType = "text/xml"; //直接輸出文件 Response.TransmitFile(path); }
MVC中返回文件方法
public FileResult TxtFile(string filename) { //txt,html,xml文件 string path = @"E:\Win10桌面\" + filename; string contentType = "text/plan"; if (filename.Contains("html")) contentType = "text/html"; else if (filename.Contains("xml")) contentType = "text/xml"; //指定文件路徑 返回FilePathResult return File(path, contentType); }
注意:很多時候返回html 文件在瀏覽器中顯示亂碼,原因是瀏覽器解析html文件默認使用utf-8編碼解析,然而有很多網頁的文件內容以及文件頭使用gb2312編碼,
解決方法是使用記事本
1.打開html源文件另存文件,選擇utf-8編碼,
2.修改html 文件頭 content-type類型 為utf-8
如果源代碼為:
<meta http-equiv="Content-type" content="text/html;" charset="gb2312" />
二、FileResult 介紹
1.
FileResult是一個基於文件的ActionResult,利用FileResult我們可以很容易地將從某個物理文件的內容響應給客戶端。ASP.NET MVC定義了三個具體的FileResult,分別是FileContentResult、FilePathResult和FileStreamResult。
針對文件的響應具有兩種形式,即內聯(Inline)和附件(Attachment)。一般來說,前者會利用瀏覽器直接打開響應的文件,而后者會以獨立的文件下載到客戶端。對於后者,我們一般會為下載的文件指定一個文件名,這個文件名可以通過FileResult的FileDownloadName屬性來指定。文件響應在默認情況下采用內聯的方式,如果需要采用附件的形式,需要為響應創建一個名稱為Content-Disposition的報頭,該報頭值的格式為“attachment; filename={ FileDownloadName }”。
2.
FileContentResult是針對文件內容創建的FileResult。如下面的代碼片斷所示,FileContentResult具有一個字節數組類型的只讀屬性FileContents表示響應文件的內容,該屬性在構造函數中指定。FileContentResult針對文件內容的響應實現也很簡單,從如下所示的WriteFile方法定義可以看出,它只是調用當前HttpResponse的OutputStream屬性的Write方法直接將表示文件內容的字節數組寫入響應輸出流。
3.
從名稱可以看出,FilePathResult是一個根據物理文件路徑創建FileResult。如下面的代碼片斷所示,表示響應文件的路徑通過只讀屬性FileName表示,該屬性在構造函數中被初始化。在實現的WriteFile方法中,FilePathResult直接將文件路徑作為參數調用當前HttpResponse的TransmitFile實現了針對文件內容的響應。抽象類Controller同樣定義了兩個File方法重載來根據文件路徑創建相應的FilePathResult。
4.
FileStreamResult允許我們通過一個用於讀取文件內容的流來創建FileResult。如下面的代碼片斷所示,讀取文件流通過只讀屬性FileStream表示,該屬性在構造函數中被初始化。在實現的WriteFile方法中,FileStreamResult通過指定的文件流讀取文件內容,並最終調用當前HttpResponse的OutputStream屬性的Write方法將讀取的內容寫入當前HTTP響應的輸出流中。抽象類Controller中同樣定義了兩個File方法重載根據文件讀取流創建相應的FileStreamResult。