2016-08-25 4 views
0

Есть много статей, которые Ive читал об этом, но я havnt нашел решение.Показать изображение в новой вкладке с помощью 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/tiff, не image/tif

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

Вы можете заменить весь код переключателя заявление, которое errorprone (как эту ошибку) путем использования MimeMapping класса, который находится в System.Web.

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. Файл действителен. Похоже, что это может быть проблемой при сопоставлении файлов браузера или окон. Он работает для других типов изображений, но не для TIF.Если я открываю папку и ссылаюсь непосредственно на файл, это также приводит к окну загрузки, что заставляет меня думать, что эта проблема не связана с самим кодом, а с отображением файлов браузера или окон. Я отмечаю ваш ответ как правильный, поскольку это привело меня к моему выводу :) – Roman

 Смежные вопросы

  • Нет связанных вопросов^_^