如何从具有相对引用内容的单独文件夹中呈现静态HTML
本文关键字:文件夹 单独 HTML 静态 相对 引用 | 更新日期: 2023-09-27 18:06:41
我正在开发一个自定义CMS。我在Azure blobs中存储了每个研究文章的内容。内容包括一个index.html文件和任何相关的图像,pdf等。index.html页面使用相对的本地引用,如:
<img src="chuck-norris-1.jpg" />
这样我们的设计人员就可以制作相关内容的文章,并将其全部放在一个文件夹中发送到Azure blob容器。然后,每个web服务器将内容下载到本地researchcharle内容文件夹结构中,如下所示:
ResearchArticleBodyLocal'abc
所以,现在我必须在有人查看文章时显示此内容。我正在将index.html读取为字符串并使用@Html.raw()。问题是,从视图来看,相对引用不起作用因为视图显然与内容在不同的位置。
但是#1相对引用是关闭的,#2由于某种原因它运行了两次动作方法,好像它有jQuery问题,但我这里没有使用任何jQuery…
这是我正在尝试的:
控制器方法——
ravm.ArticleBodyIndexHtmlPath = System.IO.File.ReadAllText(Server.MapPath(ConfigurationManager.AppSettings["ResearchArticleBodyRelativeLocalDirectory"] + researchArticle.BodyRelativeLocalPath + "/index.html"));
视图——
@(Html.Raw(Model.ArticleBodyIndexHtmlPath))
我也尝试过这个解决方案,但相对参考的事情仍然是一个问题…有人知道如何解决这个问题,而不需要设计人员将预期的目录结构放入内容引用中吗?
你也许可以把目录结构在那里使用一点字符串替换/正则表达式?我在我自己的模板系统中这样做,这样设计师就可以做src="chuck-norris.jpg",我根据被击中的网站自动替换为src="/othersite-image-dir/chuck-norris.jpg"。这样我的设计师就不用记住目录了。
另一种方法是为你的对象设置一个特定的目录结构,即 图片js
css这样,设计师就可以点击src="/js/my-chuck-norris.js",无论文件在哪个网站
是的,我最后这样做了:
private List<string> GetFilePathsAndUpdateIndexHtml(string bodyFolderChoices, string containerName)
{
// get path to each item
var filePaths =
Directory.GetFiles(
Server.MapPath(ConfigurationManager.AppSettings["ResearchArticleFTPUploadRoot"] + "/" +
bodyFolderChoices));
// get root from web.config
var azureRootUrl = ConfigurationManager.AppSettings["AzureBlobRootUrl"] + containerName + "/";
// find index.html and replace relative references
foreach (var s in filePaths)
{
if (s.Contains("index.html"))
{
var doc = new HtmlDocument();
doc.LoadHtml(System.IO.File.ReadAllText(s));
HtmlNodeCollection links = doc.DocumentNode.SelectNodes("//*[@background or @lowsrc or @src or @href]");
if (links == null)
continue;
foreach (HtmlNode link in links)
{
// references to outside URLs this will break unless we check for 'http' and leave alone
if (link.Attributes["background"] != null && !link.Attributes["background"].Value.Contains("http"))
link.Attributes["background"].Value = azureRootUrl + link.Attributes["background"].Value;
if (link.Attributes["href"] != null && !link.Attributes["href"].Value.Contains("http"))
link.Attributes["href"].Value = azureRootUrl + link.Attributes["href"].Value;
if (link.Attributes["lowsrc"] != null && !link.Attributes["lowsrc"].Value.Contains("http"))
link.Attributes["lowsrc"].Value = azureRootUrl + link.Attributes["lowsrc"].Value;
if (link.Attributes["src"] != null && !link.Attributes["src"].Value.Contains("http"))
link.Attributes["src"].Value = azureRootUrl + link.Attributes["src"].Value;
}
doc.Save(s);
}
}
return filePaths.ToList();
}