using CP.Business; using CP.Cache; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Web; namespace CP.Web { public class Statics { #region 返回静态文件输出 /// <summary> /// 返回静态文件输出 /// </summary> /// <param name="name">名称</param> /// <param name="type">类型-防止重名</param> /// <returns></returns> public static string GetStatics(string name, string type = "") { if (string.IsNullOrEmpty(name)) return ""; StringBuilder sb = new StringBuilder(); var names = name.Split(':'); if (names != null && names.Length > 0) { string br = "\r\n"; for (int i = 0; i < names.Length; i++) { if (i == names.Length - 1) br = ""; var item = StaticFile.GetStaticFile(names[i], type); if (item != null && !string.IsNullOrEmpty(item.url)) { switch (item.type) { case "js": sb.Append("<script type=\"text/javascript\" src=\"" + item.url + "?v=" + item.ver + "\"></script>" + br); break; case "css": sb.Append("<link href=\"" + item.url + "?v=" + item.ver + "\" rel=\"stylesheet\" type=\"text/css\" />" + br); break; } } } } return sb.ToString(); } #endregion } public class StaticFile { /// <summary> /// 缓存 /// </summary> static WMCache cache = WMCache.GetCacheService(); /// <summary> /// cache中的所有数据 /// </summary> /// <returns></returns> public static List<StaticFileInfo> GetStaticFileList() { string key = CacheKeys.Static_File; List<StaticFileInfo> list = cache.GetObject<List<StaticFileInfo>>(key) as List<StaticFileInfo>; if (list == null) { list = StaticFileData.GetStaticFileList(); cache.AddObject(key, list, (int)CacheTime.System); } return list; } /// <summary> /// 某个文件 /// </summary> /// <param name="name"></param> /// <returns></returns> public static StaticFileInfo GetStaticFile(string name, string type) { StaticFileInfo info = new StaticFileInfo(); var list = GetStaticFileList(); foreach (var item in list) { if (!string.IsNullOrWhiteSpace(type)) { if (item.name.Trim().Equals(name, StringComparison.CurrentCultureIgnoreCase) && item.type.Equals(type, StringComparison.CurrentCultureIgnoreCase)) return item; } else { if (item.name.Trim().Equals(name, StringComparison.CurrentCultureIgnoreCase)) return item; } } return info; } } public class StaticFileInfo { /// <summary> /// 名称 /// </summary> public string name { get; set; } /// <summary> /// 地址 /// </summary> public string url { get; set; } /// <summary> /// 版本号 /// </summary> public string ver { get; set; } /// <summary> /// 类型/css/js /// </summary> public string type { get; set; } } public class StaticFileData { /// <summary> /// get 文件中的static文件配置 /// </summary> /// <returns></returns> public static List<StaticFileInfo> GetStaticFileList() { List<StaticFileInfo> list = new List<StaticFileInfo>(); string result = string.Empty; try { string path = System.Web.HttpContext.Current.Server.MapPath("/") + "Config/data/static.config"; result = File.ReadAllText(path); } catch (Exception ex) { throw new Exception("static.config配置错误:" + ex.Message); } if (!string.IsNullOrEmpty(result)) { try { list = JsonConvert.DeserializeObject<List<StaticFileInfo>>(result); } catch (Exception ex) { throw new Exception("反序列化static.config出错:" + ex.Message); } } return list; } } }