使用图像引用呈现.html文件作为视图。 Asp Net Mvc

时间:2014-06-30 14:16:47

标签: html asp.net asp.net-mvc

我有.html文件和gif文件,它们存储在服务器的机器上的一个文件夹中。 Html文件对gif文件有一个引用,如<img src="file.gif" />

在我的ASP.NET MVC应用程序中,我想显示“下载”链接。如果用户点击它,浏览器必须显示存储的带有注入图片的html文件。

我尝试使用下一个代码:

@Html.ActionLink("Download", "DownloadHtmlFile", "ControllerName") 

public ActionResult DownloadHtmlFile()
{
    return new FilePathResult("path_to_html_file.html", "text/html");
}

在这种情况下,浏览器显示html文件。但是在图像的地方有一个洞而不是图像(就像被删除了一样)。

我该如何正确实现?

P.S。我无法将文件存储在我的应用程序的文件夹中(如'C:\ inetpub \ MyApplicationName ...'),以便将它们直接引用到.cshtml中查看,因为它会对它们进行未经授权的访问。

2 个答案:

答案 0 :(得分:1)

问题是,html缺少实际图片。

你有2种方法,要么通过完整路径引用图像,即使用户在本地打开.html文件也可以使用它们:

<img src="http://someDomainName.com/file.gif" />

但缺点是如果用户离线,图像将不会显示。

第二个选项是打包(即压缩)文件并将它们一起发送。

像这样:

var outputStream = new MemoryStream();

using (var zip = new ZipFile())
{
    zip.AddEntry("path_to_html_file.html", "content1");
    zip.AddEntry("path_to_image_file.gif", "content2");
    zip.Save(outputStream);
}

outputStream.Position = 0;
return File(outputStream, "application/zip", "filename.zip");

有一点需要注意,如果你想让它变得健壮,你需要存储在DB或xml文件中的元数据(.htmls包含哪些图像)。但这可能会造成维护问题。

另一种选择是使用HtmlAgility包来扫描.htmls图像。

 HtmlDocument doc = new HtmlDocument();
 doc.Load("path_to_html_file.html");
 foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//img[@src]")
 {
    HtmlAttribute att = link["src"];
    //build a collection of image locations and add them to zip
 }

答案 1 :(得分:0)

您可以使用以下操作来显示图像而不创建html视图:

public ActionResult Image(string imageName)
{
    var imagesPath = Server.MapPath("/Content/Images");
    var fullPath = Path.Combine(imagesPath, imageName);
    return base.File(fullPath, "image/jpeg");
}

然后你可以用这个网址获取图片:

http://localhost/MyController/Image?imageName=someImage.jpeg

修改 如果您需要从视图中显示它,只需添加此方法的操作链接,即

@Url.Action("Image", "MyController", new { imageName = "someImage.jpeg" })

P.S。确保正确设置路由。希望它有所帮助!