- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Configuration;
- using System.Text;
- using System.IO;
- namespace KangMore.Web
- {
- public static class HtmlStaticTools
- {
- /// <summary>
- /// 输出静态页面
- /// </summary>
- /// <param name="htmlStaticEnum">静态化类型</param>
- /// <param name="listConvertContent">标签以及转化内容列表</param>
- /// <returns>返回新生成的静态页面URI</returns>
- public static string OutputHtml(HtmlStaticEnum htmlStaticEnum, List<ConvertContent> listConvertContent, String htmlName)
- {
- //绝对路径
- string filePath = "";
- //相对Web容器路径
- string fileUri = "";
- //初始化名称
- htmlName += ".html";
- string staticTemplatePath = "";
- string webPath = HttpContext.Current.Server.MapPath(@"..\");
- string filePathKey = "HtmlStatic_" + htmlStaticEnum.ToString();
- string staticTemplateKey = "StaticTemplate_" + htmlStaticEnum.ToString();
- //暂时不含日期
- fileUri = String.Format(@"{0}"
- , ConfigurationManager.AppSettings[filePathKey].ToString()
- //, DateTime.Now.ToShortDateString()
- );
- filePath = String.Format(@"{0}{1}"
- , webPath
- , fileUri
- );
- staticTemplatePath = String.Format(@"{0}{1}"
- , webPath
- , ConfigurationManager.AppSettings[staticTemplateKey].ToString());
- StringBuilder sbTemplateContent = new StringBuilder();
- StreamReader sr = new StreamReader(staticTemplatePath);//建立文件读取流
- String strTempLine;
- while ((strTempLine = sr.ReadLine()) != null)
- {
- sbTemplateContent.Append(strTempLine);
- }
- sr.Close();//关闭文件读取流
- foreach (var item in listConvertContent)
- {
- sbTemplateContent.Replace(item.Tag, item.Content);
- }
- if (!Directory.Exists(filePath))
- {
- Directory.CreateDirectory(filePath);
- }
- fileUri = fileUri + @"\" + htmlName;
- filePath = filePath + @"\" + htmlName;
- StreamWriter sw = new StreamWriter(filePath, false, Encoding.Unicode);
- sw.Write(sbTemplateContent.ToString());
- sw.Close();
- return @"..\" + fileUri;
- }
- /// <summary>
- /// 查找是否已经存在静态化文件
- /// </summary>
- /// <param name="filePath">文件绝对路径</param>
- /// <param name="htmlName">文件名</param>
- /// <returns>是否存在</returns>
- private static bool GetHtmlUri(string filePath, String htmlName)
- {
- if (!File.Exists(filePath+@"\"+htmlName))
- {
- return false;
- }
- return true;
- }
- /// <summary>
- /// 校验HTML文件是否存在
- /// </summary>
- /// <param name="htmlStaticEnum">静态化类型</param>
- /// <param name="htmlName">文件名称</param>
- /// <returns>若没找到则返回String.Empty 找到则返回相对Web容器的路径</returns>
- public static string CheckHadHtml(HtmlStaticEnum htmlStaticEnum, string htmlName)
- {
- //绝对路径
- string filePath = "";
- //相对Web容器路径
- string fileUri = "";
- //初始化名称
- htmlName += ".html";
- string webPath = HttpContext.Current.Server.MapPath(@"..\");
- string filePathKey = "HtmlStatic_" + htmlStaticEnum.ToString();
- string staticTemplateKey = "StaticTemplate_" + htmlStaticEnum.ToString();
- //暂时不含日期
- fileUri = String.Format(@"{0}"
- , ConfigurationManager.AppSettings[filePathKey].ToString()
- //, DateTime.Now.ToShortDateString()
- );
- filePath = String.Format(@"{0}{1}"
- , webPath
- , fileUri
- );
- if (GetHtmlUri(filePath, htmlName))
- {
- return @"..\"+fileUri + @"\" + htmlName;
- }
- return "";
- }
- }
- }
静态页模版
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta name="robots" content="all" />
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>静态页模版</title>
- </head>
- <body >
- <span>{name}</span>
- <span>{title}</span>
- </body></html>
- string uri = HtmlStaticTools.CheckHadHtml(HtmlStaticEnum.Disease, diseaseExtendID.ToString());
- if (string.IsNullOrEmpty(uri))
- {
- List<ConvertContent> list = new List<ConvertContent>();
- list.Add(new ConvertContent("{name}", "xxxx"));
- list.Add(new ConvertContent("{title}", "页面静态化"));
- Response.Redirect(HtmlStaticTools.OutputHtml(HtmlStaticEnum.Disease, list, diseaseExtendID.ToString()));
- }else
- {
- Response.Redirect(uri);
- }
- <pre>
- <!--静态化地址-->
- <add key="HtmlStatic_News" value="NewsHtmls"/>
- <add key="HtmlStatic_Hospital" value="HospitalHtmls"/>
- <add key="HtmlStatic_Disease" value="DiseaseHtmls"/>
- <!--静态化模板-->
- <add key="StaticTemplate_News" value="Template\News.htm"/>
- <add key="StaticTemplate_Hospital" value="Template\Hospital.htm"/>
- <add key="StaticTemplate_Disease" value="Template\Disease.htm"/>
- /// <summary>
- /// 静态化网页枚举
- /// </summary>
- public enum HtmlStaticEnum
- {
- News,
- Hospital,
- Disease
- }