2015-12-28 22 views
10

いくつかのコードを編集していますが、FileContentResultタイプを返すメソッドがあります。私はサービスからストリームを取得するので、返すタイプをFileStreamResultに変更すると便利です。FileContentResultとFileStreamResultの違い

ストリームを配列に変換してFileContentResultを返す必要がありますか?

戻り値の型を安全に変更することはできますか?

答えて

16

FileResultは、他のすべての抽象基本クラスです。

  • FileContentResult - あなたは、オープンストリームを持っている、あなたはそれがファイル
として 内容だ返すようにしたい - あなたは ファイル
  • FileStreamResultとして返したいバイト配列を持っている場合、それを使用
  • 12

    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"); 
    } 
    

    、ユーザーはブラウザからダウンロードプロンプトを取得します。

    +3

    クライアントは違いを知ることができません。クライアントは、ブラウザにバイトを送信するために使用された.NETクラスを見つけることができません。 – usr

    +0

    ウェブページの特定のセクションにファイルを表示する必要がある場合はどうすればいいですか?現在、ファイルストリームはウェブページ全体をレンダリングします。ページ内の小さな領域をターゲットにできますか? – Unbreakable

    +0

    iframeで読み込もうとするといいでしょう。 – Shyju

    関連する問題