使用 MVC 4 Actionresult 在新选项卡中显示图像
Show Image in new tab using 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>
任何帮助将不胜感激:)
您使用了错误的 MIME 类型。对于 .tif
个文件,它应该是 image/tiff
,而不是 image/tif
case ".tif":
mimeType = "image/tiff";
break;
您可以使用 System.Web.[=18= 中的 MimeMapping
class 替换容易出错的整个 switch 语句代码(如此错误) ]
MineMapping 有一个名为 GetMimeMapping
的方法,它将 return 根据文件扩展名为您提供正确的 MIME 类型。
var fsResult = new FileStreamResult(fileStream, MimeMapping.GetMimeMapping(fileName));
我读了很多关于这个的文章,但我还没有找到解决方案。
情况很简单:
- 我有一个图片超链接。
- 单击后,我希望链接文件在新选项卡中打开。
- 文件可以是 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>
任何帮助将不胜感激:)
您使用了错误的 MIME 类型。对于 .tif
个文件,它应该是 image/tiff
,而不是 image/tif
case ".tif":
mimeType = "image/tiff";
break;
您可以使用 System.Web.[=18= 中的 MimeMapping
class 替换容易出错的整个 switch 语句代码(如此错误) ]
MineMapping 有一个名为 GetMimeMapping
的方法,它将 return 根据文件扩展名为您提供正确的 MIME 类型。
var fsResult = new FileStreamResult(fileStream, MimeMapping.GetMimeMapping(fileName));