Entrambe FileStreamResult
e FileContentResult
ereditano da FileResult
che eredita da ActionResult
. Così si può tornare sia un tipo da un metodo che ha ActionResult
come tipo di ritorno
Se si dispone già di un flusso , è possibile utilizzare FileStreamResult
costruttore per restituire un 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));
}
Se si dispone già di un arrray byte, è possibile utilizzare FileContentResult
costruttore per restituire un 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));
}
Il metodo Controller.File
ha sovraccarichi che richiede sia una matrice di byte o un flusso
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));
}
Se il browser ha il supporto per visualizzare il tipo di contenuto della risposta, la risposta verrà visualizzata nel browser. Ad esempio, per il codice di cui sopra, verrà visualizzato il contenuto del pdf nel browser.
C'è un altro sovraccarico del metodo File
che prende il nome del file di download che verrà utilizzato dalla finestra di dialogo di salvataggio/download del browser in modo che l'utente possa salvarlo sul computer locale e/o aprire.
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");
}
Con questo, l'utente riceverà un prompt di download dal browser.
Il cliente non può dire la differenza. Il client non è in grado di scoprire quale classe .NET è stata utilizzata per inviare byte al browser. – usr
Cosa succede se ho bisogno di mostrare il file in una particolare sezione della pagina web. Attualmente filestream renderà l'intera pagina web. Possiamo indirizzare una piccola area in una pagina? – Unbreakable
Immagino che tu possa provare a caricare in un iframe. Non ho mai provato da solo se – Shyju