我在編輯一些代碼,並且有一種方法返回FileContentResult
類型。我從服務中獲得流,因此對於我來說,將返回類型更改爲FileStreamResult
會更方便。FileContentResult和FileStreamResult之間的區別
我應該將流轉換爲數組來返回FileContentResult
?
或者我能否安全地改變返回類型?
我在編輯一些代碼,並且有一種方法返回FileContentResult
類型。我從服務中獲得流,因此對於我來說,將返回類型更改爲FileStreamResult
會更方便。FileContentResult和FileStreamResult之間的區別
我應該將流轉換爲數組來返回FileContentResult
?
或者我能否安全地改變返回類型?
FileResult
是所有其他的抽象基類。
FileContentResult
- 使用它,當你有一個字節數組,你會 想回作爲文件FileStreamResult
- 你有流開,你想回到它的 內容爲文件FileStreamResult
和FileContentResult
繼承自FileResult
,它繼承自ActionResult
。所以,你可以從具有ActionResult
返回類型
的方法返回任何一個類型的。如果你已經有了一個流,可以使用FileStreamResult
構造函數返回一個FileResult
public ActionResult Download()
{
var f = Server.MapPath("~/Content/mypdf.pdf");
var fileStream = new FileStream(f,FileMode.Open,FileAccess.Read);
return new FileStreamResult(fileStream, MimeMapping.GetMimeMapping(f));
}
如果你已經有了一個字節arrray,您可以使用FileContentResult
構造函數返回一個FileResult
public ActionResult Download()
{
var f = Server.MapPath("~/Content/mypdf.pdf");
var bytes = System.IO.File.ReadAllBytes(f);
return new FileContentResult(bytes, MimeMapping.GetMimeMapping(f));
}
該Controller.File
方法具有重載其中它可以是一個字節數組或一個流
public ActionResult Download()
{
var f = Server.MapPath("~/Content/mypdf.pdf");
var bytes = System.IO.File.ReadAllBytes(f);
return File(bytes, MimeMapping.GetMimeMapping(f));
}
public ActionResult Download2()
{
var f = Server.MapPath("~/Content/mypdf.pdf");
var fileStream = new FileStream(f, FileMode.Open, FileAccess.Read);
return File(fileStream, MimeMapping.GetMimeMapping(f));
}
如果瀏覽器以顯示響應的內容類型的支持,該響應將被顯示在瀏覽器中。例如,對於上面的代碼,它將在瀏覽器中顯示pdf內容。
File
方法存在另一個過載,它採用瀏覽器的保存/下載對話框將使用的下載文件名,以便用戶可以將其保存到本地計算機和/或打開。
public ActionResult Download4()
{
var f = Server.MapPath("~/Content/mypdf.pdf");
var fileStream = new FileStream(f, FileMode.Open, FileAccess.Read);
return File(fileStream, MimeMapping.GetMimeMapping(f),"MyfileNiceFileName.pdf");
}
這樣,用戶將從瀏覽器獲得下載提示。
客戶端無法區分差異。客戶端找不到.NET類用於向瀏覽器發送字節。 – usr
如果我需要將文件顯示到網頁的特定部分,該怎麼辦?目前文件流將呈現整個網頁。我們可以針對頁面中的一個小區域嗎? – Unbreakable
我想你可以嘗試加載一個iframe。從來沒有嘗試過,雖然 – Shyju