いくつかのコードを編集していますが、FileContentResult
タイプを返すメソッドがあります。私はサービスからストリームを取得するので、返すタイプをFileStreamResult
に変更すると便利です。FileContentResultとFileStreamResultの違い
ストリームを配列に変換してFileContentResult
を返す必要がありますか?
戻り値の型を安全に変更することはできますか?
いくつかのコードを編集していますが、FileContentResult
タイプを返すメソッドがあります。私はサービスからストリームを取得するので、返すタイプをFileStreamResult
に変更すると便利です。FileContentResultとFileStreamResultの違い
ストリームを配列に変換してFileContentResult
を返す必要がありますか?
戻り値の型を安全に変更することはできますか?
FileResult
は、他のすべての抽象基本クラスです。
FileContentResult
- あなたは、オープンストリームを持っている、あなたはそれがファイルFileStreamResult
として返したいバイト配列を持っている場合、それを使用FileStreamResult
およびFileContentResult
の両方は、ActionResult
を継承するFileResult
から継承します。だから、あなたはあなたが既に持っている場合は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));
}
を返すようにFileStreamResult
コンストラクタを使用することができます、すでにストリームを持っている場合は、戻り値の型
としてActionResult
を持っている方法からいずれか1種類を返すことができます。あなたは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));
}
を返すようにFileContentResult
コンストラクタを使用することができますバイトarrray、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