关于使用百度UEditor富文本编辑器的总结
2016-01-07 13:44
585 查看
这段时间公司有个需求要用到富文本编辑器,在这里做一个小小的使用总结吧。
首先准备工作
到官网下载http://ueditor.baidu.com/website/ 将编辑器下载下来
技术文档 http://fex.baidu.com/ueditor/
可以在demo里面看到,先引入js
要使用编辑器的话,在需要引入的位置中加入
实例化编辑器
其他一下方法在demo里面都有,比较常用的
准备工作做好之后,遇到了图片上传问题,弄了好长时间,发现需要在config.json配置上传路径和前缀,需要导入jar包
图片的上传是 com.baidu.ueditor.ActionEnter 这个jar包里面的servlet,这个servlet上传图片是会上传到本地项目下
如果需要自己写一个上传的action,传到自己的服务器下的某个地址,则需要修改源码,下面我有注释的地方就是需要修改的
--------------------------------自定义上传到其他服务器---------------------------
从官网上下载下来源码 \ueditor1_4_3-src\jsp\src 这个下面就是jar包里的源码 ,修改
BinaryUploader.java
后来测试的时候发现一个bug,就是如果在编辑器中存入大量样式的时候,会生成很多标签,存到数据库,再重新编辑的时候想再回显放入编辑器,用js放入报错
var content = '<p>
</p><h1>又一对姐弟恋诞生!倪妮井柏然经纪人承认恋情</h1><p>
</p><p>2016年03月 6日 20:53 网易娱乐</p><p>
</p>';有很多换行符,但js字符串有换行的话要用加号连接,解决办法是在java后台代码中就处理掉换行,content = content.replaceAll("\n", " "); 把所有的换行符去掉就ok了
后续如果有补充,会回来修复一下
首先准备工作
到官网下载http://ueditor.baidu.com/website/ 将编辑器下载下来
技术文档 http://fex.baidu.com/ueditor/
可以在demo里面看到,先引入js
<script type="text/javascript" charset="utf-8" src="ueditor/ueditor.config.js"></script> <script type="text/javascript" charset="utf-8" src="ueditor/ueditor.all.min.js"> </script> <script type="text/javascript" charset="utf-8" src="ueditor/lang/zh-cn/zh-cn.js"></script>
要使用编辑器的话,在需要引入的位置中加入
<script id="editor" type="text/plain" style="width:1024px;height:500px;"></script>
实例化编辑器
<script type="text/javascript"> //建议使用工厂方法getEditor创建和引用编辑器实例 var ue = UE.getEditor('editor'); </script>
其他一下方法在demo里面都有,比较常用的
//获取富文本编辑器内容 function getContent() { return UE.getEditor('editor').getContent(); } //设置编辑器内容 function setContent() { UE.getEditor('editor').setContent("内容"); }
准备工作做好之后,遇到了图片上传问题,弄了好长时间,发现需要在config.json配置上传路径和前缀,需要导入jar包
图片的上传是 com.baidu.ueditor.ActionEnter 这个jar包里面的servlet,这个servlet上传图片是会上传到本地项目下
如果需要自己写一个上传的action,传到自己的服务器下的某个地址,则需要修改源码,下面我有注释的地方就是需要修改的
--------------------------------自定义上传到其他服务器---------------------------
从官网上下载下来源码 \ueditor1_4_3-src\jsp\src 这个下面就是jar包里的源码 ,修改
BinaryUploader.java
package com.baidu.ueditor.upload; import com.baidu.ueditor.PathFormat; import com.baidu.ueditor.define.AppInfo; import com.baidu.ueditor.define.BaseState; import com.baidu.ueditor.define.FileType; import com.baidu.ueditor.define.State; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.FileItemIterator; import org.apache.commons.fileupload.FileItemStream; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class BinaryUploader { public static final State save(HttpServletRequest request, Map<String, Object> conf) { FileItemStream fileStream = null; boolean isAjaxUpload = request.getHeader( "X_Requested_With" ) != null; if (!ServletFileUpload.isMultipartContent(request)) { return new BaseState(false, AppInfo.NOT_MULTIPART_CONTENT); } ServletFileUpload upload = new ServletFileUpload( new DiskFileItemFactory()); if ( isAjaxUpload ) { upload.setHeaderEncoding( "UTF-8" ); } try { FileItemIterator iterator = upload.getItemIterator(request); while (iterator.hasNext()) { fileStream = iterator.next(); if (!fileStream.isFormField()) break; fileStream = null; } if (fileStream == null) { return new BaseState(false, AppInfo.NOTFOUND_UPLOAD_DATA); } String savePath = (String) conf.get("savePath"); String originFileName = fileStream.getName(); String suffix = FileType.getSuffixByFilename(originFileName); originFileName = originFileName.substring(0, originFileName.length() - suffix.length()); savePath = savePath + suffix; long maxSize = ((Long) conf.get("maxSize")).longValue(); if (!validType(suffix, (String[]) conf.get("allowFiles"))) { return new BaseState(false, AppInfo.NOT_ALLOW_FILE_TYPE); } savePath = PathFormat.parse(savePath, originFileName); //savePath为config.json设置的文件名 String physicalPath = (String) conf.get("rootPath") + savePath; InputStream is = fileStream.openStream(); //把这里替换成自己的上传方法 State storageState = StorageManager.saveFileByInputStream(is, physicalPath, maxSize); is.close(); if (storageState.isSuccess()) { //url返回前缀,需要改成服务器地址前缀 storageState.putInfo("url", PathFormat.format(savePath)); storageState.putInfo("type", suffix); storageState.putInfo("original", originFileName + suffix); } return storageState; } catch (FileUploadException e) { return new BaseState(false, AppInfo.PARSE_REQUEST_ERROR); } catch (IOException e) { } return new BaseState(false, AppInfo.IO_ERROR); } private static boolean validType(String type, String[] allowTypes) { List<String> list = Arrays.asList(allowTypes); return list.contains(type); } }
后来测试的时候发现一个bug,就是如果在编辑器中存入大量样式的时候,会生成很多标签,存到数据库,再重新编辑的时候想再回显放入编辑器,用js放入报错
var content = '<p>
</p><h1>又一对姐弟恋诞生!倪妮井柏然经纪人承认恋情</h1><p>
</p><p>2016年03月 6日 20:53 网易娱乐</p><p>
</p>';有很多换行符,但js字符串有换行的话要用加号连接,解决办法是在java后台代码中就处理掉换行,content = content.replaceAll("\n", " "); 把所有的换行符去掉就ok了
后续如果有补充,会回来修复一下
相关文章推荐
- UITableView使用
- UITableView 属性集合
- iOS下 UILabel 如何自动换行
- 处理二值查询 Processing Boolean queries
- 3.UIImageView基本使用
- 如何实现一个搜索引擎(2):查询索引 How to Implement a Search Engine Part 2: Query Index
- 【转载】GUID vs INT Debate
- 2.UILabel的基本使用
- Java源码-AbstractStringBuilder
- UITableView中复用cell显示信息错乱
- NSInteger 与 NSUInteger 和 int与 NSInteger 区别
- 基于Elasticsearch+Fluentd+Kibana的日志收集分析系统搭建与应用
- UICollectionView
- django实现用户登陆访问限制@login_required
- 1.大神班 UI 526
- 设计模式Builder模式
- iOS开发之UIImagePickerController图片选择管理器
- Android子线程真的不能更新UI么
- iOS个人整理03-UIButton按钮
- UILabel文字过长时的显示格式