Baidu ueditor 1.5 using asp.net
config.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | /* 前后端通信相关的配置,注释只允许使用多行方式 Geovin Du,geovindu,涂聚文,塗聚文 ueditor/dialogs/image/image.html 预览图片不显示 预览图片出错地址 */ { /* 上传图片配置项 */ "imageActionName" : "uploadimage" , /* 执行上传图片的action名称 */ "imageFieldName" : "upfile" , /* 提交的图片表单名称 */ "imageMaxSize" : 2048000, /* 上传大小限制,单位B */ "imageAllowFiles" : [ ".png" , ".jpg" , ".jpeg" , ".gif" , ".bmp" ], /* 上传图片格式显示 */ "imageCompressEnable" : true , /* 是否压缩图片,默认是true */ "imageCompressBorder" : 1600, /* 图片压缩最长边限制 */ "imageInsertAlign" : "none" , /* 插入的图片浮动方式 */ "imageUrlPrefix" : "" , /* 图片访问路径前缀 ueditor/net*/ "imagePathFormat" : "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}" , /* 上传保存路径,可以自定义保存路径和文件名格式 */ /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */ /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */ /* {time} 会替换成时间戳 */ /* {yyyy} 会替换成四位年份 */ /* {yy} 会替换成两位年份 */ /* {mm} 会替换成两位月份 */ /* {dd} 会替换成两位日期 */ /* {hh} 会替换成两位小时 */ /* {ii} 会替换成两位分钟 */ /* {ss} 会替换成两位秒 */ /* 非法字符 \ : * ? " < > | */ /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */ /* 涂鸦图片上传配置项 */ "scrawlActionName ": " uploadscrawl ", /* 执行上传涂鸦的action名称 */ " scrawlFieldName ": " upfile ", /* 提交的图片表单名称 */ " scrawlPathFormat ": " upload/image/{yyyy}{mm}{dd}/{time}{rand:6} ", /* 上传保存路径,可以自定义保存路径和文件名格式 */ " scrawlMaxSize ": 2048000, /* 上传大小限制,单位B */ " scrawlUrlPrefix ": " ", /* 图片访问路径前缀 /ueditor/net/*/ " scrawlInsertAlign ": " none ", /* 截图工具上传 */ " snapscreenActionName ": " uploadimage ", /* 执行上传截图的action名称 */ " snapscreenPathFormat ": " upload/image/{yyyy}{mm}{dd}/{time}{rand:6} ", /* 上传保存路径,可以自定义保存路径和文件名格式 */ " snapscreenUrlPrefix ": " ", /* 图片访问路径前缀 */ " snapscreenInsertAlign ": " none ", /* 插入的图片浮动方式 */ /* 抓取远程图片配置 */ " catcherLocalDomain ": [" 127.0.0.1 ", " localhost ", " img.baidu.com "], " catcherActionName ": " catchimage ", /* 执行抓取远程图片的action名称 */ " catcherFieldName ": " source ", /* 提交的图片列表表单名称 */ " catcherPathFormat ": " upload/image/{yyyy}{mm}{dd}/{time}{rand:6} ", /* 上传保存路径,可以自定义保存路径和文件名格式 */ " catcherUrlPrefix ": " ", /* 图片访问路径前缀 */ " catcherMaxSize ": 2048000, /* 上传大小限制,单位B */ " catcherAllowFiles ": [" .png ", " .jpg ", " .jpeg ", " .gif ", " .bmp "], /* 抓取图片格式显示 */ /* 上传视频配置 */ " videoActionName ": " uploadvideo ", /* 执行上传视频的action名称 */ " videoFieldName ": " upfile ", /* 提交的视频表单名称 */ " videoPathFormat ": " upload/video/{yyyy}{mm}{dd}/{time}{rand:6} ", /* 上传保存路径,可以自定义保存路径和文件名格式 */ " videoUrlPrefix ": " ", /* 视频访问路径前缀 */ " videoMaxSize ": 102400000, /* 上传大小限制,单位B,默认100MB */ " videoAllowFiles ": [ " .flv ", " .swf ", " .mkv ", " .avi ", " .rm ", " .rmvb ", " .mpeg ", " .mpg ", " .ogg ", " .ogv ", " .mov ", " .wmv ", " .mp4 ", " .webm ", " .mp3 ", " .wav ", " .mid "], /* 上传视频格式显示 */ /* 上传文件配置 */ " fileActionName ": " uploadfile ", /* controller里,执行上传视频的action名称 */ " fileFieldName ": " upfile ", /* 提交的文件表单名称 */ " filePathFormat ": " upload/file/{yyyy}{mm}{dd}/{time}{rand:6} ", /* 上传保存路径,可以自定义保存路径和文件名格式 */ " fileUrlPrefix ": " ", /* 文件访问路径前缀 */ " fileMaxSize ": 51200000, /* 上传大小限制,单位B,默认50MB */ " fileAllowFiles ": [ " .png ", " .jpg ", " .jpeg ", " .gif ", " .bmp ", " .flv ", " .swf ", " .mkv ", " .avi ", " .rm ", " .rmvb ", " .mpeg ", " .mpg ", " .ogg ", " .ogv ", " .mov ", " .wmv ", " .mp4 ", " .webm ", " .mp3 ", " .wav ", " .mid ", " .rar ", " .zip ", " .tar ", " .gz ", " .7z ", " .bz2 ", " .cab ", " .iso ", " .doc ", " .docx ", " .xls ", " .xlsx ", " .ppt ", " .pptx ", " .pdf ", " .txt ", " .md ", " .xml " ], /* 上传文件格式显示 */ /* 列出指定目录下的图片 */ " imageManagerActionName ": " listimage ", /* 执行图片管理的action名称 */ " imageManagerListPath ": " upload/image ", /* 指定要列出图片的目录 */ " imageManagerListSize ": 20, /* 每次列出文件数量 */ " imageManagerUrlPrefix ": " / ", /* 图片访问路径前缀 不加/ 会出现预览图片不显示,路径出现问题,ueditor/dialogs/image/upload/image/*/ " imageManagerInsertAlign ": " none ", /* 插入的图片浮动方式 */ " imageManagerAllowFiles ": [" .png ", " .jpg ", " .jpeg ", " .gif ", " .bmp "], /* 列出的文件类型 */ /* 列出指定目录下的文件 */ " fileManagerActionName ": " listfile ", /* 执行文件管理的action名称 */ " fileManagerListPath ": " upload/file ", /* 指定要列出文件的目录 */ " fileManagerUrlPrefix ": " / ", /* 文件访问路径前缀 */ " fileManagerListSize ": 20, /* 每次列出文件数量 */ " fileManagerAllowFiles ": [ " .png ", " .jpg ", " .jpeg ", " .gif ", " .bmp ", " .flv ", " .swf ", " .mkv ", " .avi ", " .rm ", " .rmvb ", " .mpeg ", " .mpg ", " .ogg ", " .ogv ", " .mov ", " .wmv ", " .mp4 ", " .webm ", " .mp3 ", " .wav ", " .mid ", " .rar ", " .zip ", " .tar ", " .gz ", " .7z ", " .bz2 ", " .cab ", " .iso ", " .doc ", " .docx ", " .xls ", " .xlsx ", " .ppt ", " .pptx ", " .pdf ", " .txt ", " .md ", " .xml" ] /* 列出的文件类型 */ } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dynamic; using System.IO; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace DuUeditor.ueditor.net { /// <summary> /// Config 的摘要说明 /// ///Geovin Du,geovindu,涂聚文,塗聚文 edit /// </summary> public static class Config { private static bool noCache = true ; /// <summary> /// /// </summary> /// <returns></returns> private static JObject BuildItems() { //文件所在地址 ///Geovin Du,geovindu,涂聚文,塗聚文 edit var json = File.ReadAllText(HttpContext.Current.Server.MapPath( "~/config/config.json" )); return JObject.Parse(json); } public static JObject Items { get { if (noCache || _Items == null ) { _Items = BuildItems(); } return _Items; } } private static JObject _Items; public static T GetValue<T>( string key) { return Items[key].Value<T>(); } public static String[] GetStringList( string key) { return Items[key].Select(x => x.Value<String>()).ToArray(); } public static String GetString( string key) { return GetValue<String>(key); } public static int GetInt( string key) { return GetValue< int >(key); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace DuUeditor.ueditor.net { /// <summary> /// Config 的摘要说明 /// </summary> public class ConfigHandler : Handler { public ConfigHandler(HttpContext context) : base (context) { } public override void Process() { WriteJson(Config.Items); } } } |
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; using System.Collections; using Newtonsoft.Json; namespace DuUeditor.ueditor.net { /// <summary> /// controller 的摘要说明 /// Geovin Du,geovindu,涂聚文,塗聚文 edit /// </summary> public class controller : IHttpHandler { /// <summary> /// geovindu /// Geovin Du /// 涂聚文 /// </summary> /// <param name="context"></param> public void ProcessRequest(HttpContext context) { Handler action = null; switch (context.Request["action"]) { case "config": action = new ConfigHandler(context); break; case "uploadimage": action = new UploadHandler(context, new UploadConfig() { AllowExtensions = Config.GetStringList("imageAllowFiles"), PathFormat = Config.GetString("imagePathFormat"), SizeLimit = Config.GetInt("imageMaxSize"), UploadFieldName = Config.GetString("imageFieldName") }); break; case "uploadscrawl": action = new UploadHandler(context, new UploadConfig() { AllowExtensions = new string[] { ".png" }, PathFormat = Config.GetString("scrawlPathFormat"), SizeLimit = Config.GetInt("scrawlMaxSize"), UploadFieldName = Config.GetString("scrawlFieldName"), Base64 = true, Base64Filename = "scrawl.png" }); break; case "uploadvideo": action = new UploadHandler(context, new UploadConfig() { AllowExtensions = Config.GetStringList("videoAllowFiles"), PathFormat = Config.GetString("videoPathFormat"), SizeLimit = Config.GetInt("videoMaxSize"), UploadFieldName = Config.GetString("videoFieldName") }); break; case "uploadfile": action = new UploadHandler(context, new UploadConfig() { AllowExtensions = Config.GetStringList("fileAllowFiles"), PathFormat = Config.GetString("filePathFormat"), SizeLimit = Config.GetInt("fileMaxSize"), UploadFieldName = Config.GetString("fileFieldName") }); break; case "listimage": action = new ListFileManager(context, Config.GetString("imageManagerListPath"), Config.GetStringList("imageManagerAllowFiles")); break; case "listfile": action = new ListFileManager(context, Config.GetString("fileManagerListPath"), Config.GetStringList("fileManagerAllowFiles")); break; case "catchimage": action = new CrawlerHandler(context); break; default: action = new NotSupportedHandler(context); break; } action.Process(); } public bool IsReusable { get { return false; } } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Net; using System.IO; namespace DuUeditor.ueditor.net { /// <summary> /// Crawler 的摘要说明 /// Geovin Du,geovindu,涂聚文,塗聚文 edit /// </summary> public class CrawlerHandler : Handler { private string [] Sources; private Crawler[] Crawlers; public CrawlerHandler(HttpContext context) : base (context) { } public override void Process() { Sources = Request.Form.GetValues( "source[]" ); if (Sources == null || Sources.Length == 0) { WriteJson( new { state = "参数错误:没有指定抓取源" }); return ; } Crawlers = Sources.Select(x => new Crawler(x, Server).Fetch()).ToArray(); WriteJson( new { state = "SUCCESS" , list = Crawlers.Select(x => new { state = x.State, source = x.SourceUrl, url = x.ServerUrl }) }); } } /// <summary> /// /// </summary> public class Crawler { public string SourceUrl { get ; set ; } public string ServerUrl { get ; set ; } public string State { get ; set ; } private HttpServerUtility Server { get ; set ; } /// <summary> /// /// </summary> /// <param name="sourceUrl"></param> /// <param name="server"></param> public Crawler( string sourceUrl, HttpServerUtility server) { this .SourceUrl = sourceUrl; this .Server = server; } /// <summary> /// /// </summary> /// <returns></returns> public Crawler Fetch() { if (!IsExternalIPAddress( this .SourceUrl)) { State = "INVALID_URL" ; return this ; } var request = HttpWebRequest.Create( this .SourceUrl) as HttpWebRequest; using ( var response = request.GetResponse() as HttpWebResponse) { if (response.StatusCode != HttpStatusCode.OK) { State = "Url returns " + response.StatusCode + ", " + response.StatusDescription; return this ; } if (response.ContentType.IndexOf( "image" ) == -1) { State = "Url is not an image" ; return this ; } //ServerUrl = PathFormatter.Format(Path.GetFileName(this.SourceUrl), Config.GetString("catcherPathFormat")); ServerUrl = PathFormatter.Format(Path.GetFileName(SourceUrl.Contains( "?" ) ? SourceUrl.Substring(0, SourceUrl.IndexOf( "?" )) : SourceUrl), Config.GetString( "catcherPathFormat" )); ///Geovin Du,geovindu,涂聚文,塗聚文 edit var savePath = Server.MapPath( "/" + ServerUrl); //Server.MapPath(ServerUrl) if (!Directory.Exists(Path.GetDirectoryName(savePath))) { Directory.CreateDirectory(Path.GetDirectoryName(savePath)); } try { var stream = response.GetResponseStream(); var reader = new BinaryReader(stream); byte [] bytes; using ( var ms = new MemoryStream()) { byte [] buffer = new byte [4096]; int count; while ((count = reader.Read(buffer, 0, buffer.Length)) != 0) { ms.Write(buffer, 0, count); } bytes = ms.ToArray(); } File.WriteAllBytes(savePath, bytes); State = "SUCCESS" ; } catch (Exception e) { State = "抓取错误:" + e.Message; } return this ; } } private bool IsExternalIPAddress( string url) { var uri = new Uri(url); switch (uri.HostNameType) { case UriHostNameType.Dns: var ipHostEntry = Dns.GetHostEntry(uri.DnsSafeHost); foreach (IPAddress ipAddress in ipHostEntry.AddressList) { byte [] ipBytes = ipAddress.GetAddressBytes(); if (ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { if (!IsPrivateIP(ipAddress)) { return true ; } } } break ; case UriHostNameType.IPv4: return !IsPrivateIP(IPAddress.Parse(uri.DnsSafeHost)); } return false ; } /// <summary> /// /// </summary> /// <param name="myIPAddress"></param> /// <returns></returns> private bool IsPrivateIP(IPAddress myIPAddress) { if (IPAddress.IsLoopback(myIPAddress)) return true ; if (myIPAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { byte [] ipBytes = myIPAddress.GetAddressBytes(); // 10.0.0.0/24 if (ipBytes[0] == 10) { return true ; } // 172.16.0.0/16 else if (ipBytes[0] == 172 && ipBytes[1] == 16) { return true ; } // 192.168.0.0/16 else if (ipBytes[0] == 192 && ipBytes[1] == 168) { return true ; } // 169.254.0.0/16 else if (ipBytes[0] == 169 && ipBytes[1] == 254) { return true ; } } return false ; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | using System; using System.Collections.Generic; using System.Linq; using System.Web; using Newtonsoft.Json; namespace DuUeditor.ueditor.net { /// <summary> /// Handler 的摘要说明 /// </summary> public abstract class Handler { public Handler(HttpContext context) { this .Request = context.Request; this .Response = context.Response; this .Context = context; this .Server = context.Server; } public abstract void Process(); protected void WriteJson( object response) { string jsonpCallback = Request[ "callback" ], json = JsonConvert.SerializeObject(response); if (String.IsNullOrWhiteSpace(jsonpCallback)) { Response.AddHeader( "Content-Type" , "text/plain" ); Response.Write(json); } else { Response.AddHeader( "Content-Type" , "application/javascript" ); Response.Write(String.Format( "{0}({1});" , jsonpCallback, json)); } Response.End(); } public HttpRequest Request { get ; private set ; } public HttpResponse Response { get ; private set ; } public HttpContext Context { get ; private set ; } public HttpServerUtility Server { get ; private set ; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; namespace DuUeditor.ueditor.net { /// <summary> /// FileManager 的摘要说明 /// Geovin Du,geovindu,涂聚文,塗聚文 /// </summary> public class ListFileManager : Handler { enum ResultState { Success, InvalidParam, AuthorizError, IOError, PathNotFound } private int Start; private int Size; private int Total; private ResultState State; private String PathToList; private String[] FileList; private String[] SearchExtensions; /// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="pathToList"></param> /// <param name="searchExtensions"></param> public ListFileManager(HttpContext context, string pathToList, string [] searchExtensions) : base (context) { this .SearchExtensions = searchExtensions.Select(x => x.ToLower()).ToArray(); // this .PathToList = pathToList; } /// <summary> /// /// </summary> public override void Process() { try { Start = String.IsNullOrEmpty(Request[ "start" ]) ? 0 : Convert.ToInt32(Request[ "start" ]); Size = String.IsNullOrEmpty(Request[ "size" ]) ? Config.GetInt( "imageManagerListSize" ) : Convert.ToInt32(Request[ "size" ]); } catch (FormatException) { State = ResultState.InvalidParam; WriteResult(); return ; } var buildingList = new List<String>(); try { ///ueditor/dialogs/image/ ///Geovin Du,geovindu,涂聚文,塗聚文 edit var localPath = Server.MapPath( "/" + PathToList); //Server.MapPath(PathToList) buildingList.AddRange(Directory.GetFiles(localPath, "*" , SearchOption.AllDirectories) .Where(x => SearchExtensions.Contains(Path.GetExtension(x).ToLower())) .Select(x => PathToList + x.Substring(localPath.Length).Replace( "\\" , "/" ))); Total = buildingList.Count; FileList = buildingList.OrderBy(x => x).Skip(Start).Take(Size).ToArray(); } catch (UnauthorizedAccessException) { State = ResultState.AuthorizError; } catch (DirectoryNotFoundException) { State = ResultState.PathNotFound; } catch (IOException) { State = ResultState.IOError; } finally { WriteResult(); } } /// <summary> /// /// </summary> private void WriteResult() { WriteJson( new { state = GetStateString(), list = FileList == null ? null : FileList.Select(x => new { url = x }), start = Start, size = Size, total = Total }); } /// <summary> /// /// </summary> /// <returns></returns> private string GetStateString() { switch (State) { case ResultState.Success: return "SUCCESS" ; case ResultState.InvalidParam: return "参数不正确" ; case ResultState.PathNotFound: return "路径不存在" ; case ResultState.AuthorizError: return "文件系统权限不足" ; case ResultState.IOError: return "文件系统读取错误" ; } return "未知错误" ; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace DuUeditor.ueditor.net { /// <summary> /// NotSupportedHandler 的摘要说明 /// </summary> public class NotSupportedHandler : Handler { /// <summary> /// /// </summary> /// <param name="context"></param> public NotSupportedHandler(HttpContext context) : base (context) { } /// <summary> /// /// </summary> public override void Process() { WriteJson( new { state = "action 参数为空或者 action 不被支持。" }); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; using System.Text.RegularExpressions; namespace DuUeditor.ueditor.net { /// <summary> /// PathFormater 的摘要说明 /// Geovin Du,geovindu,涂聚文,塗聚文 edit /// </summary> public static class PathFormatter { /// <summary> /// /// </summary> /// <param name="originFileName"></param> /// <param name="pathFormat"></param> /// <returns></returns> public static string Format( string originFileName, string pathFormat) { if (String.IsNullOrWhiteSpace(pathFormat)) { pathFormat = "{filename}{rand:6}" ; } var invalidPattern = new Regex( @"[\\\/\:\*\?\042\<\>\|]" ); originFileName = invalidPattern.Replace(originFileName, "" ); string extension = Path.GetExtension(originFileName); string filename = Path.GetFileNameWithoutExtension(originFileName); pathFormat = pathFormat.Replace( "{filename}" , filename); pathFormat = new Regex( @"\{rand(\:?)(\d+)\}" , RegexOptions.Compiled).Replace(pathFormat, new MatchEvaluator( delegate (Match match) { var digit = 6; if (match.Groups.Count > 2) { digit = Convert.ToInt32(match.Groups[2].Value); } var rand = new Random(); return rand.Next(( int )Math.Pow(10, digit), ( int )Math.Pow(10, digit + 1)).ToString(); })); pathFormat = pathFormat.Replace( "{time}" , DateTime.Now.Ticks.ToString()); pathFormat = pathFormat.Replace( "{yyyy}" , DateTime.Now.Year.ToString()); pathFormat = pathFormat.Replace( "{yy}" , (DateTime.Now.Year % 100).ToString( "D2" )); pathFormat = pathFormat.Replace( "{mm}" , DateTime.Now.Month.ToString( "D2" )); pathFormat = pathFormat.Replace( "{dd}" , DateTime.Now.Day.ToString( "D2" )); pathFormat = pathFormat.Replace( "{hh}" , DateTime.Now.Hour.ToString( "D2" )); pathFormat = pathFormat.Replace( "{ii}" , DateTime.Now.Minute.ToString( "D2" )); pathFormat = pathFormat.Replace( "{ss}" , DateTime.Now.Second.ToString( "D2" )); return pathFormat + extension; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Text.RegularExpressions; using System.IO; namespace DuUeditor.ueditor.net { /// <summary> /// UploadHandler 的摘要说明 /// ///Geovin Du,geovindu,涂聚文,塗聚文 edit /// </summary> public class UploadHandler : Handler { /// <summary> /// /// </summary> public UploadConfig UploadConfig { get ; private set ; } /// <summary> /// /// </summary> public UploadResult Result { get ; private set ; } /// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="config"></param> public UploadHandler(HttpContext context, UploadConfig config) : base (context) { this .UploadConfig = config; this .Result = new UploadResult() { State = UploadState.Unknown }; } /// <summary> /// /// </summary> public override void Process() { byte [] uploadFileBytes = null ; string uploadFileName = null ; if (UploadConfig.Base64) { uploadFileName = UploadConfig.Base64Filename; uploadFileBytes = Convert.FromBase64String(Request[UploadConfig.UploadFieldName]); } else { var file = Request.Files[UploadConfig.UploadFieldName]; uploadFileName = file.FileName; if (!CheckFileType(uploadFileName)) { Result.State = UploadState.TypeNotAllow; WriteResult(); return ; } if (!CheckFileSize(file.ContentLength)) { Result.State = UploadState.SizeLimitExceed; WriteResult(); return ; } uploadFileBytes = new byte [file.ContentLength]; try { file.InputStream.Read(uploadFileBytes, 0, file.ContentLength); } catch (Exception) { Result.State = UploadState.NetworkError; WriteResult(); } } Result.OriginFileName = uploadFileName; // var savePath = PathFormatter.Format(uploadFileName, UploadConfig.PathFormat); /////Geovin Du,geovindu,涂聚文,塗聚文 edit var localPath = Server.MapPath( "/" +savePath); //Server.MapPath(savePath) try { if (!Directory.Exists(Path.GetDirectoryName(localPath))) { Directory.CreateDirectory(Path.GetDirectoryName(localPath)); } File.WriteAllBytes(localPath, uploadFileBytes); Result.Url = savePath; Result.State = UploadState.Success; } catch (Exception e) { Result.State = UploadState.FileAccessError; Result.ErrorMessage = e.Message; } finally { WriteResult(); } } /// <summary> /// /// </summary> private void WriteResult() { this .WriteJson( new { state = GetStateMessage(Result.State), url = Result.Url, title = Result.OriginFileName, original = Result.OriginFileName, error = Result.ErrorMessage }); } /// <summary> /// /// </summary> /// <param name="state"></param> /// <returns></returns> private string GetStateMessage(UploadState state) { switch (state) { case UploadState.Success: return "SUCCESS" ; case UploadState.FileAccessError: return "文件访问出错,请检查写入权限" ; case UploadState.SizeLimitExceed: return "文件大小超出服务器限制" ; case UploadState.TypeNotAllow: return "不允许的文件格式" ; case UploadState.NetworkError: return "网络错误" ; } return "未知错误" ; } private bool CheckFileType( string filename) { var fileExtension = Path.GetExtension(filename).ToLower(); return UploadConfig.AllowExtensions.Select(x => x.ToLower()).Contains(fileExtension); } private bool CheckFileSize( int size) { return size < UploadConfig.SizeLimit; } } /// <summary> /// /// </summary> public class UploadConfig { /// <summary> /// 文件命名规则 /// </summary> public string PathFormat { get ; set ; } /// <summary> /// 上传表单域名称 /// </summary> public string UploadFieldName { get ; set ; } /// <summary> /// 上传大小限制 /// </summary> public int SizeLimit { get ; set ; } /// <summary> /// 上传允许的文件格式 /// </summary> public string [] AllowExtensions { get ; set ; } /// <summary> /// 文件是否以 Base64 的形式上传 /// </summary> public bool Base64 { get ; set ; } /// <summary> /// Base64 字符串所表示的文件名 /// </summary> public string Base64Filename { get ; set ; } } /// <summary> /// /// </summary> public class UploadResult { public UploadState State { get ; set ; } public string Url { get ; set ; } public string OriginFileName { get ; set ; } public string ErrorMessage { get ; set ; } } /// <summary> /// /// </summary> public enum UploadState { Success = 0, SizeLimitExceed = -1, TypeNotAllow = -2, FileAccessError = -3, NetworkError = -4, Unknown = 1, } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <%@ Page Language= "C#" AutoEventWireup= "true" CodeBehind= "Default.aspx.cs" Inherits= "DuUeditor._Default" ValidateRequest= "false" %> <!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 runat= "server" > <meta http-equiv= "Content-Type" content= "text/html;charset=utf-8" /> <title>完整demo</title> <meta name= "author" content= "geovindu,Geovin Du 涂聚文" /> <script type= "text/javascript" charset= "utf-8" src= "ueditor/ueditor.config.js" ></script> <script type= "text/javascript" charset= "utf-8" src= "ueditor/editor_api.js" > </script> <!--建议手动加在语言,避免在ie下有时因为加载语言失败导致编辑器加载失败--> <!--这里加载的语言文件会覆盖你在配置项目里添加的语言类型,比如你在配置项目里配置的是英文,这里加载的中文,那最后就是中文--> <script type= "text/javascript" charset= "utf-8" src= "ueditor/lang/zh-cn/zh-cn.js" ></script> </head> <body> <form id= "form1" runat= "server" > <div> <textarea id= "editor" name= "" class = "editor" runat= "server" ></textarea> </div> </form> <script type= "text/javascript" > //实例化编辑器 //建议使用工厂方法getEditor创建和引用编辑器实例,如果在某个闭包下引用该编辑器,直接调用UE.getEditor('editor')就能拿到相关的实例 var ue = UE.getEditor( 'editor' ); </script> </body> </html> |
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
分类:
CSharp code
标签:
html editor
, uetitor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2014-06-12 sql: Compare Tables
2010-06-12 Microsoft Visual Studio International Feature Pack 2.0