Sowohl FileStreamResult
als auch FileContentResult
erben von FileResult
, die von ActionResult
erbt. So können Sie entweder ein Typ aus einer Methode zurück, die ActionResult
als Rückgabetyp hat
Wenn Sie bereits ein Strom haben, können Sie FileStreamResult
Konstruktor verwenden, um eine 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));
}
zurückzukehren Wenn Sie bereits ein Byte arrray, können Sie FileContentResult
Konstruktor zurückgeben 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));
}
verwenden
Controller.File
Die Methode hat Überlastungen, die entweder einen Byte-Array oder einen Strom
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));
}
nimmt Wenn der Browser den Träger den Inhaltstyp der Antwort angezeigt wird, wird die Reaktion im Browser angezeigt werden. Für den obigen Code wird beispielsweise der PDF-Inhalt im Browser angezeigt.
Es gibt eine weitere Überladung der Methode File
, die den Namen der heruntergeladenen Datei annimmt, den der Speichern/Herunterladen-Dialog des Browsers verwendet, damit der Benutzer seinen lokalen Computer speichern und/oder öffnen kann.
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");
}
Mit diesem erhalten Benutzer eine Download-Eingabeaufforderung aus dem Browser.
Der Client kann den Unterschied nicht erkennen. Der Client kann nicht herausfinden, welche .NET-Klasse zum Senden von Bytes an den Browser verwendet wurde. – usr
Was passiert, wenn ich die Datei einem bestimmten Abschnitt der Webseite anzeigen muss? Derzeit wird Filestream die gesamte Webseite rendern. Können wir einen kleinen Bereich auf einer Seite anvisieren? – Unbreakable
Ich denke, Sie können versuchen, in einem iframe zu laden. Habe es nie selbst versucht – Shyju