富文本编辑器_com.baidu.ueditor.actionenter 需要引jar包吗-程序员宅基地

技术标签: 百度编辑器  

这段时间公司有个需求要用到富文本编辑器,在这里做一个小小的使用总结吧。

首先准备工作

到官网下载http://ueditor.baidu.com/website/ 将编辑器下载下来

技术文档 http://fex.baidu.com/ueditor/

可以在demo里面看到,先引入js

[html]  view plain  copy
  1. <script type="text/javascript" charset="utf-8" src="ueditor/ueditor.config.js"></script>  
  2. <script type="text/javascript" charset="utf-8" src="ueditor/ueditor.all.min.js"> </script>  
  3. <script type="text/javascript" charset="utf-8" src="ueditor/lang/zh-cn/zh-cn.js"></script>  

要使用编辑器的话,在需要引入的位置中加入

[html]  view plain  copy
  1. <script id="editor" type="text/plain" style="width:1024px;height:500px;"></script>  

实例化编辑器

[html]  view plain  copy
  1. <script type="text/javascript">  
  2.     //建议使用工厂方法getEditor创建和引用编辑器实例  
  3.    var ue = UE.getEditor('editor');  
  4. </script>  

其他一下方法在demo里面都有,比较常用的

[html]  view plain  copy
  1. //获取富文本编辑器内容  
  2. function getContent() {  
  3.     return UE.getEditor('editor').getContent();  
  4. }  
  5. //设置编辑器内容  
  6. function setContent() {  
  7.     UE.getEditor('editor').setContent("内容");  
  8. }  


准备工作做好之后,遇到了图片上传问题,弄了好长时间,发现需要在config.json配置上传路径和前缀,需要导入jar包


图片的上传是 com.baidu.ueditor.ActionEnter 这个jar包里面的servlet,这个servlet上传图片是会上传到本地项目下

如果需要自己写一个上传的action,传到自己的服务器下的某个地址,则需要修改源码,下面我有注释的地方就是需要修改的

--------------------------------自定义上传到其他服务器---------------------------

从官网上下载下来源码  \ueditor1_4_3-src\jsp\src 这个下面就是jar包里的源码 ,修改 BinaryUploader.java


[java]  view plain  copy
  1. package com.baidu.ueditor.upload;  
  2.   
  3. import com.baidu.ueditor.PathFormat;  
  4. import com.baidu.ueditor.define.AppInfo;  
  5. import com.baidu.ueditor.define.BaseState;  
  6. import com.baidu.ueditor.define.FileType;  
  7. import com.baidu.ueditor.define.State;  
  8.   
  9. import java.io.IOException;  
  10. import java.io.InputStream;  
  11. import java.util.Arrays;  
  12. import java.util.List;  
  13. import java.util.Map;  
  14.   
  15. import javax.servlet.http.HttpServletRequest;  
  16.   
  17. import org.apache.commons.fileupload.FileItemIterator;  
  18. import org.apache.commons.fileupload.FileItemStream;  
  19. import org.apache.commons.fileupload.FileUploadException;  
  20. import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
  21. import org.apache.commons.fileupload.servlet.ServletFileUpload;  
  22.   
  23. public class BinaryUploader {  
  24.   
  25.     public static final State save(HttpServletRequest request,  
  26.             Map<String, Object> conf) {  
  27.         FileItemStream fileStream = null;  
  28.         boolean isAjaxUpload = request.getHeader( "X_Requested_With" ) != null;  
  29.   
  30.         if (!ServletFileUpload.isMultipartContent(request)) {  
  31.             return new BaseState(false, AppInfo.NOT_MULTIPART_CONTENT);  
  32.         }  
  33.   
  34.         ServletFileUpload upload = new ServletFileUpload(  
  35.                 new DiskFileItemFactory());  
  36.   
  37.         if ( isAjaxUpload ) {  
  38.             upload.setHeaderEncoding( "UTF-8" );  
  39.         }  
  40.   
  41.         try {  
  42.             FileItemIterator iterator = upload.getItemIterator(request);  
  43.   
  44.             while (iterator.hasNext()) {  
  45.                 fileStream = iterator.next();  
  46.   
  47.                 if (!fileStream.isFormField())  
  48.                     break;  
  49.                 fileStream = null;  
  50.             }  
  51.   
  52.             if (fileStream == null) {  
  53.                 return new BaseState(false, AppInfo.NOTFOUND_UPLOAD_DATA);  
  54.             }  
  55.   
  56.             String savePath = (String) conf.get("savePath");  
  57.             String originFileName = fileStream.getName();  
  58.             String suffix = FileType.getSuffixByFilename(originFileName);  
  59.   
  60.             originFileName = originFileName.substring(0,  
  61.                     originFileName.length() - suffix.length());  
  62.             savePath = savePath + suffix;  
  63.   
  64.             long maxSize = ((Long) conf.get("maxSize")).longValue();  
  65.   
  66.             if (!validType(suffix, (String[]) conf.get("allowFiles"))) {  
  67.                 return new BaseState(false, AppInfo.NOT_ALLOW_FILE_TYPE);  
  68.             }  
  69.   
  70.             savePath = PathFormat.parse(savePath, originFileName);  
  71.                         //savePath为config.json设置的文件名  
  72.             String physicalPath = (String) conf.get("rootPath") + savePath;  
  73.   
  74.             InputStream is = fileStream.openStream();  
  75.                         //把这里替换成自己的上传方法  
  76.                         State storageState = StorageManager.saveFileByInputStream(is,  
  77.                     physicalPath, maxSize);  
  78.             is.close();  
  79.   
  80.             if (storageState.isSuccess()) {  
  81.                                 //url返回前缀,需要改成服务器地址前缀  
  82.                                 storageState.putInfo("url", PathFormat.format(savePath));  
  83.                 storageState.putInfo("type", suffix);  
  84.                 storageState.putInfo("original", originFileName + suffix);  
  85.             }  
  86.   
  87.             return storageState;  
  88.         } catch (FileUploadException e) {  
  89.             return new BaseState(false, AppInfo.PARSE_REQUEST_ERROR);  
  90.         } catch (IOException e) {  
  91.         }  
  92.         return new BaseState(false, AppInfo.IO_ERROR);  
  93.     }  
  94.   
  95.     private static boolean validType(String type, String[] allowTypes) {  
  96.         List<String> list = Arrays.asList(allowTypes);  
  97.   
  98.         return list.contains(type);  
  99.     }  
  100. }  

后来测试的时候发现一个bug,就是如果在编辑器中存入大量样式的时候,会生成很多标签,存到数据库,再重新编辑的时候想再回显放入编辑器,用js放入报错

[javascript]  view plain  copy
  1. var content = '<p>  
  2. </p><h1>又一对姐弟恋诞生!倪妮井柏然经纪人承认恋情</h1><p>  
  3. </p><p>2016年03月 6日 20:53 网易娱乐</p><p>  
  4. </p>';  
有很多换行符,但js字符串有换行的话要用加号连接,解决办法是在java后台代码中就处理掉换行,content = content.replaceAll("\n", " "); 把所有的换行符去掉就ok了



后续如果有补充,会回来修复一下

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_29072049/article/details/79753637

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签