0

MVC3 アプリがあり、ユーザーはファイルをアップロードして、いつでも表示またはダウンロードできます。次のコードは、IE では期待どおりに動作します (ポップアップ ウィンドウが表示され、その中にファイルがレンダリングされます) が、Firefox では、[ファイルを保存して開く] ダイアログ ボックスが表示され、ポップアップ ウィンドウにファイルがレンダリングされません。Chrome では、ファイルが自動的にダウンロードされます。私のコードは次のとおりです。

   //for brevity i'm not showing how i get the file stream to display, 
   //but that code works fine, also the ContentType is set properly as well

       public class BinaryContentResult : ActionResult
    {


    private readonly string ContentType;
    private readonly string FileName;
    private readonly int Length;
    private readonly byte[] ContentBytes;

        public BinaryContentResult(byte[] contentBytes, string contentType, string fileName, int nLength)
    {
        ContentBytes = contentBytes;
        ContentType = contentType;
        FileName = fileName;
        Length = nLength;
    }
    public override void ExecuteResult(ControllerContext context)
   {
        var response = context.HttpContext.Response; //current context being passed in
        response.Clear();
        response.Cache.SetCacheability(HttpCacheability.NoCache);
        response.ContentType = ContentType;

        if (ext.ToLower().IndexOf(".pdf") == -1)
        {
            //if i comment out this line, jpg files open fine but not png
            response.AddHeader("Content-Disposition", "application; filename=" + FileName);
            response.AddHeader("Content-Length", Length.ToString());

            response.ContentEncoding = System.Text.Encoding.UTF8;
        }

        var stream = new MemoryStream(ContentBytes); //byte[] ContentBytes;
        stream.WriteTo(response.OutputStream);
        stream.Dispose();
   }
   }

私の見解は次のとおりです。

    public ActionResult _ShowDocument(string id)
    { 

        int nLength = fileStream.Length;//fileStream is a Stream object containing the file to display

         return new BinaryContentResult(byteInfo, contentType, FileName,nLength);
        }

PDF ファイルとプレーン テキスト ファイルの場合、これは全面的に機能しますが、jpg ファイルと png ファイルの場合は、ダウンロード ダイアログが表示されます。Firefox/Chrome で PDF ファイルを開くように、ポップアップで Firefox/Chrome のファイルを開くにはどうすればよいですか? ありがとう

4

1 に答える 1

2

ブラウザがストリーミングしているものを処理する方法を認識できるように、いくつかのヘッダーを送信する必要があります。特に:

Response.ContentType = "image/png"

Response.ContentType = "image/jpg" 

また、PDF 以外の場合は "Content-Disposition", "application; filename=" + FileName)、ダウンロードを強制する content-disposition を設定していることにも注意してください。

于 2012-06-07T14:28:29.477 に答える