2016-08-25 5 views
0

これについて私が読んだ記事がたくさんありますが、まだ解決策が見つかりませんでした。MVCを使用して新しいタブに画像を表示する4 Actionresult

状況は単純です:

  • 私は画像のハイパーリンクを持っています。
  • クリックすると、リンクされたファイルを新しいタブで開くことができます。
  • ファイルは、pdf(application/pdf)またはTif(image/tif)です。

私はPDFファイルで作業していますが、ファイルがTIF画像の場合、ブラウザは新しいタブで開くのではなくファイルをダウンロードしたいと考えています。ここ


私のコントローラのコードは次のとおりです。ここで

[Authorize] 
    public ActionResult GetFile(string fileName) 
    { 
     string UploadDirectory = System.Configuration.ConfigurationManager.AppSettings["DealerApplicationFilePath"]; 
     string fileExtension = Path.GetExtension(fileName); 
     string mimeType = "application/unknown"; 
     switch (fileExtension) 
     { 
      case ".pdf": 
       mimeType = "application/pdf"; 
       break; 
      case ".tif": 
       mimeType = "image/tif"; 
       break; 
     } 
     var fileStream = new FileStream(UploadDirectory + fileName, FileMode.Open, FileAccess.Read); 
     var fsResult = new FileStreamResult(fileStream, mimeType); 
     //Response.AppendHeader("Content-Disposition", "inline"); //Content-Disposition doesnt help. 
     return fsResult; 
    } 

は私のCHTMLコードです:

Html.DevExpress().HyperLink(settingsBtn => 
    { 
     settingsBtn.Name = "cb_" + c.KeyValue.ToString(); 
     settingsBtn.Properties.Target = "_blank"; 

      switch (Path.GetExtension(DataBinder.Eval(c.DataItem, "FileName").ToString())) 
      { 
       case ".pdf": 
        settingsBtn.Properties.ImageUrl = "~/Content/GridImages/FileType_PDF.png"; 
        break; 
       case ".tif": 
        settingsBtn.Properties.ImageUrl = "~/Content/GridImages/FileType_TIF.png"; 
        break; 
      } 

      //This causes a download popup. 
      settingsBtn.NavigateUrl = Url.Action("GetFile", "Account", new { fileName = "ATM-311.tif" }); 

      //This opens in a new tab. 
      //settingsBtn.NavigateUrl = Url.Action("GetFile", "Account", new { fileName = "ATM-311.pdf" }); 
    }).GetHtml(); 

、ここでは、生成されます実際のHTMLタグです:

<a class="dxeHyperlink_Metropolis" id="cb_311" href="/Account/GetFile?fileName=ATM-311.tif" target="_blank"><img src="/Content/GridImages/FileType_TIF.png" alt=""></a> 

任意の助けいただければ幸い:)

+0

多分これはあなたを助けることができます。http://stackoverflow.com/a/15789753/4730201 –

+0

この動作はブラウザ間で一貫性があるか、それは一部のブラウザではなく、他人に新しいタブで開いていますか? –

+0

@ stephen.vakil - ブラウザ間で一貫性があります(つまり、FirefoxとChrome) – Roman

答えて

0

あなたは間違ったMIMEタイプを使用しています。 .tifファイルの場合、それはないimage/tif

case ".tif": 
      mimeType = "image/tiff"; 
      break; 

あなたはSystem.WebのであるMimeMappingクラスを使用することによって、(このエラーのような)errorproneであなたの全体のswitch文のコードを置き換えることができ、image/tiffでなければなりません。

MineMappingには、GetMimeMappingという名前のメソッドがあり、ファイル拡張子に基づいて正しいMIMEタイプを返します。

var fsResult = new FileStreamResult(fileStream, MimeMapping.GetMimeMapping(fileName)); 
+0

ありがとう@Shyju。私はあなたの提案を試みたが、違いはなかった。私はマッピングを "image/tiff"で置き換えましたが、私はスイッチを削除し、違いがない 'MimeMapping.GetMimeMapping(fileName)'を使ってみました。 – Roman

+0

あなたのtifファイルは有効です(壊れていません)?あなたはイメージビューアのアプリでそれを開くことができますか?私はコード(更新されたmimeTypeで)を試して、新しいブラウザタブで画像を見ることができました。 – Shyju

+1

ありがとう@Shyja。ファイルは有効です。これは、ブラウザのconfまたはwindowsファイルのマッピングに問題があるようです。他の画像タイプでは動作しますが、TIFでは動作しません。フォルダとリンクを直接ファイルに公開すると、ダウンロードウィンドウが表示されるため、この問題はコード自体に関連するものではなく、ブラウザまたはWindowsファイルのマッピングに関連すると考えられます。私は私の結論に私を導いたように正しいものとしてあなたの答えをマークしています:) – Roman

関連する問題