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

以图像引用作为视图呈现.html文件。Asp.Net Mvc,html,asp.net,asp.net-mvc,Html,Asp.net,Asp.net Mvc,我有.html文件和gif文件,它们存储在服务器的机器上的一个文件夹中。Html文件在gif文件上有一个引用,如 在我的ASP.NETMVC应用程序中,我想显示“下载”链接。若用户点击它,浏览器必须显示带有注入图片的存储html文件 我尝试使用下一个代码: @Html.ActionLink("Download", "DownloadHtmlFile", "ControllerName") public ActionResult DownloadHtmlFile() { return

我有.html文件和gif文件,它们存储在服务器的机器上的一个文件夹中。Html文件在gif文件上有一个引用,如

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

我尝试使用下一个代码:

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

public ActionResult DownloadHtmlFile()
{
    return new FilePathResult("path_to_html_file.html", "text/html");
}
在这种情况下,浏览器会显示html文件。但图像位置上有一个洞,而不是图像(就像它被移除了一样)

我如何才能正确地实现这一点


另外,我无法将文件存储在我的应用程序文件夹(如“C:\inetpub\MyApplicationName…”)中,以便将对它们的直接引用放到.cshtml视图中,因为这样会对它们进行未经授权的访问

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

public ActionResult Image(string imageName)
{
    var imagesPath = Server.MapPath("/Content/Images");
    var fullPath = Path.Combine(imagesPath, imageName);
    return base.File(fullPath, "image/jpeg");
}
然后,您可以使用以下url获取图像:

http://localhost/MyController/Image?imageName=someImage.jpeg
编辑: 如果需要从视图中显示,只需将操作链接添加到此方法,即

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

注意:确保路由设置正确。希望有帮助

问题是,html缺少实际图片

您有两种方法,一种是通过完整路径引用图像,即使用户在本地像这样打开.html文件,也可以使用它们:

但缺点是,如果用户处于脱机状态,图像将不会显示

第二种选择是打包(即压缩)文件并一起发送

像这样:

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");
需要注意的一点是,如果您想使其健壮,您需要将元数据(其中.htmls包含哪些图像)存储在DB或xml文件或其他文件中。但这会造成维护问题

另一个选项是使用pack扫描.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
 }

但是我需要用图像精确地显示HTML。它们都由用户上传并存储在服务器上以供进一步操作。