富文本编辑器,Rich Text Editor, 简称 RTE, 它提供类似于 Microsoft Word 的编辑功能,不过是在网页上
一开始是找到CKEditor,然后发现…添加图片的方式有点麻烦,其实也算是功能丰富…
然后找了一下其他的,知道了另外一个编辑器,就是百度的UEditor,终于能正常的添加本地图片了…等一下,那我想直接添加外链图片怎么办…暂时放下先…
然后下面是正文时间
1.【创建编辑器】先进行编辑器的创建
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>ueditor demo</title> </head> <body> <!-- 加载编辑器的容器 --> <script id="container" name="content" type="text/plain"> 这里写你的初始化内容 </script> <!-- 配置文件 --> <script type="text/javascript" src="ueditor.config.js"></script> <!-- 编辑器源码文件 --> <script type="text/javascript" src="ueditor.all.js"></script> <!-- 实例化编辑器 --> <script type="text/javascript"> var ue = UE.getEditor('container'); </script> </body> </html>
2.【自定义工具栏】
由于需求原因,不需要工具栏的某些功能,只需保留文本相关和图片,所以又要进行修改。
修改的方式有两种,一种直接在ueditor.config.js配置文件中修改toolbars的内容
另外一种方法是在实例化编辑器的时候进行定义
var ue = UE.getEditor('rule_editor', { toolbars: [[ 'undo', 'redo', '|', 'bold', 'italic', 'underline', 'fontborder', 'forecolor', '|', 'simpleupload' ]] });
3.【禁用右键菜单】
然后又发现问题了,当我们右键编辑器内的时候,会出现UEditor自带的右键菜单,里面有一些常见的文本功能,当我使用其中的Ctrl+V,也就是粘贴功能的时候,出现了浏览器禁用该功能的提示,也就是说我不能使用右键菜单的粘贴功能,只能使用键盘的Ctrl+V了…然后我想直接禁用算了
同样,可以在ueditor.config.js配置文件中修改enableContextMenu属性(True/False),也可以在实例化编辑器的时候进行定义
var ue = UE.getEditor('rule_editor', { toolbars: [[ 'undo', 'redo', '|', 'bold', 'italic', 'underline', 'fontborder', 'forecolor', '|', 'simpleupload' ]], enableContextMenu: false });
4.【自定义图片上传位置】
如果想自定义图片上传的位置(服务器本地或者第三方文件对象存储),可以在 UploadHandler.cs 进行配置,路径在 ueditor\net\App_Code 中
比如我这里修改为用阿里的对象存储服务
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); var localPath = 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(); }*/ //上传到阿里云 using (Stream fileStream = new MemoryStream(uploadFileBytes))//转成Stream流 { var fs = Request.Files[UploadConfig.UploadFieldName]; string md5 = Aliyun.OSS.Util.OssUtils.ComputeContentMd5(fileStream, fs.ContentLength); string today = DateTime.Now.ToString("yyyyMMdd"); string FileName = Path.GetFileNameWithoutExtension(uploadFileName) + DateTime.Now.ToString("yyyyMMddHHmmss") + Path.GetExtension(uploadFileName);//文件名=文件名+当前上传时间 string FilePath = "GuildApp/Content/Apps/PlatformUEeditor/" + today + "/" + FileName;//云文件保存路径 try { string AccessKey = ConfigurationManager.AppSettings["AccessKey"] == null ? "" : ConfigurationManager.AppSettings["AccessKey"].ToString(); string AccessKeySecret = ConfigurationManager.AppSettings["AccessKeySecret"] == null ? "" : ConfigurationManager.AppSettings["AccessKeySecret"].ToString(); string bucketName = ConfigurationManager.AppSettings["bucketName"] == null ? "" : ConfigurationManager.AppSettings["bucketName"].ToString(); string endpoint = ConfigurationManager.AppSettings["endpoint"] == null ? "" : ConfigurationManager.AppSettings["endpoint"].ToString(); //初始化阿里云配置--外网Endpoint、访问ID、访问password Aliyun.OSS.OssClient aliyun = new Aliyun.OSS.OssClient(endpoint, AccessKey, AccessKeySecret); //将文件md5值赋值给meat头信息,服务器验证文件MD5 var objectMeta = new Aliyun.OSS.ObjectMetadata { ContentMd5 = md5, }; //文件上传--空间名、文件保存路径、文件流、meta头信息(文件md5) //返回meta头信息(文件md5) aliyun.PutObject(bucketName, FilePath, fileStream, objectMeta); //返回给UEditor的插入编辑器的图片的src FilePath="../../"+FilePath; Result.Url = ApiHelper.ShowImg(FilePath); Result.State = UploadState.Success; } catch (Exception e) { Result.State = UploadState.FileAccessError; Result.ErrorMessage = e.Message; } finally { WriteResult(); } } }
其实还有很多属性可以自定义的,比如高度,宽度以及传入自定义的参数,设置和读取编辑器的内容等,具体可以去看官方的API文档的说
最后附上UEditor的Demo