使用MVC 4 Actionresult在新选项卡中显示图像

时间:2016-08-25 16:30:51

标签: c# asp.net-mvc-4 razor devexpress-mvc

我已经阅读了很多关于此的文章,但我还没有找到解决方案。

情况很简单:

  • 我有一个图片超链接。
  • 单击时,我希望链接文件在新选项卡中打开。
  • 该文件可以是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>

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:0)

您使用的是错误的mime类型。对于.tif个文件,它应为image/tiff,而不是image/tif

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

您可以使用System.Web中的MimeMapping类替换整个错误的switch语句代码(如此错误)。

MineMapping有一个名为GetMimeMapping的方法,它会根据文件扩展名返回正确的mime类型。

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