迟了好多天的分享,CKeditor这个编辑器虽然不错,但也真苟啊,搞图片上传这个功能,快给我搞佛系了,话不多说,上代码

1、首先去官网下载一个full的版本,我用的是CKeditor 4.13,解压之后放在webcontent下边

2、在你要用的界面添加下这个

引入ckeditor编辑器

3.还有这个,这是加载文本编辑器的

<textarea class="form-control" id="editor" name="content" style="color:#8a8a8a;width: 100%; height: 482px; display: block;"></textarea>

  1. <script type="text/javascript">
  2.  
  3. CKEDITOR.replace('editor',{filebrowserUploadUrl : '${path}/ckeditor/uploader?Type=File',
  4.  
  5. filebrowserImageUploadUrl : '${path}/ckeditor/uploader?Type=Image',
  6.  
  7. filebrowserFlashUploadUrl : '${path}/ckeditor/uploader?Type=Flash'
  8.  
  9. });
  10. </script>

4.

这个是你自己的路径,

5.这个是那个上传链接里边的ckeditor文件夹(并不是下载的文本编辑器的文件),处理上传的图片文件,

CKEditorUploadServlet.java

  1. package ckeditor;
  2.  
  3. import java.io.*;
  4. import java.text.SimpleDateFormat;
  5. import java.util.*;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.*;
  8. import org.apache.commons.fileupload.FileItem;
  9. import org.apache.commons.fileupload.FileItemFactory;
  10. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  11. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  12. public class CKEditorUploadServlet extends HttpServlet {
  13. private static String baseDir;// CKEditor根目录
  14. private static boolean debug = false;// 是否debug模式
  15. private static boolean enabled = false;// 是否开启CKEditor上传
  16. private static Hashtable allowedExtensions;//允许的上传文件扩展名
  17. private static Hashtable deniedExtensions;// 阻止的上传文件扩展名
  18. private static SimpleDateFormat dirFormatter;//目录命名格式:yyyyMM
  19. private static SimpleDateFormat fileFormatter;//文件命名格式:yyyyMMddHHmmssSSS
  20. /**
  21. * Servlet初始化方法
  22. */
  23. public void init() throws ServletException {
  24. // 从web.xml中读取debug模式
  25. debug = (new Boolean(getInitParameter("debug"))).booleanValue();
  26. if (debug)
  27. System.out.println("\r\n---- SimpleUploaderServlet initialization started ----");
  28. // 格式化目录和文件命名方式
  29. dirFormatter = new SimpleDateFormat("yyyyMM");
  30. fileFormatter = new SimpleDateFormat("yyyyMMddHHmmssSSS");
  31. // 从web.xml中获取根目录名称
  32. baseDir = getInitParameter("baseDir");
  33. // 从web.xml中获取是否可以进行文件上传
  34. enabled = (new Boolean(getInitParameter("enabled"))).booleanValue();
  35. if (baseDir == null)
  36. baseDir = "/UserFiles/";
  37. String realBaseDir = getServletContext().getRealPath(baseDir);
  38. File baseFile = new File(realBaseDir);
  39. if (!baseFile.exists()) {
  40. baseFile.mkdirs();
  41. }
  42. // 实例化允许的扩展名和阻止的扩展名
  43. allowedExtensions = new Hashtable(3);
  44. deniedExtensions = new Hashtable(3);
  45. // 从web.xml中读取配置信息
  46. allowedExtensions.put("File",
  47. stringToArrayList(getInitParameter("AllowedExtensionsFile")));
  48. deniedExtensions.put("File",
  49. stringToArrayList(getInitParameter("DeniedExtensionsFile")));
  50. allowedExtensions.put("Image",
  51. stringToArrayList(getInitParameter("AllowedExtensionsImage")));
  52. deniedExtensions.put("Image", stringToArrayList(getInitParameter("DeniedExtensionsImage")));
  53. allowedExtensions.put("Flash", stringToArrayList(getInitParameter("AllowedExtensionsFlash")));
  54. deniedExtensions.put("Flash", stringToArrayList(getInitParameter("DeniedExtensionsFlash")));
  55. if (debug)
  56. System.out.println("---- SimpleUploaderServlet initialization completed ----\r\n");
  57. }
  58. public void doGet(HttpServletRequest request, HttpServletResponse response)
  59. throws ServletException, IOException {
  60. doPost(request, response);
  61. }
  62. public void doPost(HttpServletRequest request, HttpServletResponse response)
  63. throws ServletException, IOException {
  64. if (debug)
  65. System.out.println("--- BEGIN DOPOST ---");
  66. //response.setContentType("text/html; charset=UTF-8");
  67. response.setContentType("text/json; charset=utf-8");
  68. response.setHeader("Cache-Control", "no-cache");
  69. PrintWriter out = response.getWriter();
  70. // 从请求参数中获取上传文件的类型:File/Image/Flash
  71. String typeStr = request.getParameter("Type");
  72. if (typeStr == null) {
  73. typeStr = "File";
  74. }
  75. if (debug)
  76. System.out.println(typeStr);
  77. // 实例化dNow对象,获取当前时间
  78. Date dNow = new Date();
  79. // 设定上传文件路径
  80. String currentPath = baseDir + typeStr + "/"
  81. + dirFormatter.format(dNow);
  82. // 获得web应用的上传路径
  83. String currentDirPath = getServletContext().getRealPath(currentPath);
  84. // 判断文件夹是否存在,不存在则创建
  85. File dirTest = new File(currentDirPath);
  86. if (!dirTest.exists()) {
  87. dirTest.mkdirs();
  88. }
  89. // 将路径前加上web应用名
  90. currentPath = request.getContextPath() + currentPath;
  91. if (debug)
  92. System.out.println(currentDirPath);
  93. // 文件名和文件真实路径
  94. String newName = "";
  95. String fileUrl = "";
  96. if (enabled) {
  97. // 使用Apache Common组件中的fileupload进行文件上传
  98. FileItemFactory factory = new DiskFileItemFactory();
  99. ServletFileUpload upload = new ServletFileUpload(factory);
  100. try {
  101. List items = upload.parseRequest(request);
  102. Map fields = new HashMap();
  103. Iterator iter = items.iterator();
  104. while (iter.hasNext()) {
  105. FileItem item = (FileItem) iter.next();
  106. if (item.isFormField())
  107. fields.put(item.getFieldName(), item.getString());
  108. else
  109. fields.put(item.getFieldName(), item);
  110. }
  111. // CEKditor中file域的name值是upload
  112. FileItem uplFile = (FileItem) fields.get("upload");
  113. // 获取文件名并做处理
  114. String fileNameLong = uplFile.getName();
  115. fileNameLong = fileNameLong.replace('\\', '/');
  116. String[] pathParts = fileNameLong.split("/");
  117. String fileName = pathParts[pathParts.length - 1];
  118. // 获取文件扩展名
  119. String ext = getExtension(fileName);
  120. // 设置上传文件名
  121. fileName = fileFormatter.format(dNow) + "." + ext;
  122. // 获取文件名(无扩展名)
  123. String nameWithoutExt = getNameWithoutExtension(fileName);
  124. File pathToSave = new File(currentDirPath, fileName);
  125. fileUrl = currentPath + "/" + fileName;
  126. if (extIsAllowed(typeStr, ext)) {
  127. int counter = 1;
  128. while (pathToSave.exists()) {
  129. newName = nameWithoutExt + "_" + counter + "." + ext;
  130. fileUrl = currentPath + "/" + newName;
  131. pathToSave = new File(currentDirPath, newName);
  132. counter++;
  133. }
  134. uplFile.write(pathToSave);
  135. } else {
  136. if (debug)
  137. System.out.println("无效的文件类型 " + ext);
  138. }
  139. } catch (Exception ex) {
  140. if (debug)
  141. ex.printStackTrace();
  142. }
  143. } else {
  144. if (debug)
  145. System.out.println("未开启CKEditor上传功能");
  146. }
  147. // CKEditorFuncNum是回调时显示的位置,这个参数必须有
  148. String callback = request.getParameter("CKEditorFuncNum");
  149. System.out.println(request.getParameter("CKEditorFuncNum"));
  150. System.out.println(request.getParameter("CKEditor"));
  151. System.out.println(request.getParameter("langCode"));
  152.  
  153. String json="{\"uploaded\" : 1, \"fileName\" : \"fileNameStr\", \"url\":\""+fileUrl+"\" , \"error\" : { \"message\":\"successful\" } }";
  154. out.println(json);
  155. out.flush();
  156. out.close();
  157.  
  158. // out.println("<script type=\"text/javascript\">");
  159. // out.println("window.parent.CKEDITOR.tools.callFunction(" + "'1'"
  160. // + ",'" + fileUrl + "',' '涓婁紶鎴愬姛fdfdfdf''" + ")");
  161. // out.println("</script>");
  162. // out.flush();
  163. // out.close();
  164. System.out.println("callback-->"+callback);
  165. System.out.println("fileUrl-->"+json);
  166. // response.sendRedirect(request.getContextPath()+"/ATextDao?a="+fileUrl);
  167. if (debug)
  168. System.out.println("--- END DOPOST ---");
  169. }
  170. /**
  171. * 获取文件名的方法
  172. */
  173. private static String getNameWithoutExtension(String fileName) {
  174. return fileName.substring(0, fileName.lastIndexOf("."));
  175. }
  176. /**
  177. * 获取扩展名的方法
  178. */
  179. private String getExtension(String fileName) {
  180. return fileName.substring(fileName.lastIndexOf(".") + 1);
  181. }
  182. /**
  183. * 字符串像ArrayList转化的方法
  184. */
  185. private ArrayList stringToArrayList(String str) {
  186. if (debug)
  187. System.out.println(str);
  188. String[] strArr = str.split("\\|");
  189. ArrayList tmp = new ArrayList();
  190. if (str.length() > 0) {
  191. for (int i = 0; i < strArr.length; ++i) {
  192. if (debug)
  193. System.out.println(i + " - " + strArr[i]);
  194. tmp.add(strArr[i].toLowerCase());
  195. }
  196. }
  197. return tmp;
  198. }
  199. /**
  200. * 判断扩展名是否允许的方法
  201. */
  202. private boolean extIsAllowed(String fileType, String ext) {
  203. ext = ext.toLowerCase();
  204. ArrayList allowList = (ArrayList) allowedExtensions.get(fileType);
  205. ArrayList denyList = (ArrayList) deniedExtensions.get(fileType);
  206. if (allowList.size() == 0) {
  207. if (denyList.contains(ext)) {
  208. return false;
  209. } else {
  210. return true;
  211. }
  212. }
  213. if (denyList.size() == 0) {
  214. if (allowList.contains(ext)) {
  215. return true;
  216. } else {
  217. return false;
  218. }
  219. }
  220. return false;
  221. }
  222. }

web.xml

  1. <servlet>
  2. <servlet-name>SimpleUploader</servlet-name>
  3. <servlet-class>ckeditor.CKEditorUploadServlet</servlet-class>
  4. <init-param>
  5. <param-name>baseDir</param-name>
  6. <param-value>/UserFiles/</param-value>
  7. </init-param>
  8. <init-param>
  9. <param-name>debug</param-name>
  10. <param-value>true</param-value>
  11. </init-param>
  12. <init-param>
  13. <param-name>enabled</param-name>
  14. <param-value>true</param-value>
  15. </init-param>
  16. <init-param>
  17. <param-name>AllowedExtensionsFile</param-name>
  18. <param-value></param-value>
  19. </init-param>
  20. <init-param>
  21. <param-name>DeniedExtensionsFile</param-name>
  22. <param-value>
  23. html|htm|php|php2|php3|php4|php5|phtml|pwml|inc|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis|ftl
  24. </param-value>
  25. </init-param>
  26. <init-param>
  27. <param-name>AllowedExtensionsImage</param-name>
  28. <param-value>jpg|gif|jpeg|png|bmp</param-value>
  29. </init-param>
  30. <init-param>
  31. <param-name>DeniedExtensionsImage</param-name>
  32. <param-value></param-value>
  33. </init-param>
  34. <init-param>
  35. <param-name>AllowedExtensionsFlash</param-name>
  36. <param-value>swf|fla</param-value>
  37. </init-param>
  38. <init-param>
  39. <param-name>DeniedExtensionsFlash</param-name>
  40. <param-value></param-value>
  41. </init-param>
  42. <load-on-startup>0</load-on-startup>
  43. </servlet>
  44. <servlet-mapping>
  45. <servlet-name>SimpleUploader</servlet-name>
  46. <url-pattern>/ckeditor/uploader</url-pattern>
  47. </servlet-mapping>

这样就能上传到你这个项目的文件夹下了,命令行有地址输出,

至于所见即所得,html代码存入数据库就行,文本编辑器这自己写个form表单,写个servlet加入数据库就行了

CKeditor上传图片 实现所见即所得界面的更多相关文章

  1. Ckeditor上传图片返回的JS直接显示出来,未执行!!!

    Ckeditor上传图片网上有很多教程. 下面是我今天下午遇到的一个坑...自己挖的坑. 在conotroller里 我开始习惯性的 response.setContentType("app ...

  2. 去除ckeditor上传图片预览中的英文字母

    去除ckeditor上传图片预览中的英文字母 CKEDITOR.replace('text', { filebrowserImageUploadUrl : 'upload_img.do', langu ...

  3. 如何去除 ckeditor 上传图片后在原码中留下的 style="width: 100%;height:100px"之类的代码呢?

    ckeditor编辑器在上传图片的时候,会神奇的加上一段诡异的代码: 这导致上传的小图也是被拉伸到100%,我根本就没有定义它,找来找去也找不到element.style,原来这是在system.cs ...

  4. ckeditor上传图片的注意点

    1.要在 ckeditor的  config.js 文件中加上 CKEDITOR.editorConfig = function( config ) { config.filebrowserImage ...

  5. django使用ckeditor上传图片

    1.在模型类中设置字段为富文本类型,这里需要注意引入的是RichTextUploadingField,以允许上传图片,需要和RichTextField区分开 from ckeditor_uploade ...

  6. 记一次ckeditor上传图片到服务器问题

    package com.util;import java.io.IOException; import java.io.PrintWriter; import java.util.List;impor ...

  7. 使用 CKEditor 上传图片, 粘贴屏幕截图

    之前写过wangEditor,那真是好用,文档也清晰,半天就搞定了,无奈没有对应license,只好选择别的. 外语一般,阅读理解都靠蒙.CKEditor官方文档看的我云里雾里,国内的博客比较少,经过 ...

  8. ckeditor 上传图片解决跨域问题

    前后端分离ckeditor跨域问题处理 这个跨域问题很常见,特别是前后端分离的情况,IP地址不同导致了页面跨域,具体原因大多是因为前端ifame问题 分析 ckeditor插件里config.js需要 ...

  9. CKEditor上传图片—配置CKFinder

    参考:http://blog.csdn.net/gavin710/article/details/8741738

随机推荐

  1. UITree_study

    1.Create canvas 2.Add TreeView 3.Subscribe and unsubscribe events(订阅和取消订阅事件) 4.Data bind items it's ...

  2. 连接数据库 - (mysql-thinkphp) (2)

    1.现在conf里面写好选择的数据库 选择好了以后 2.在index里面输入 查询mysql数据库里面的表tables_priv的所有数据 public function index() { $res ...

  3. Ubuntu系统部署tomcat并启用JMX实战案例

    Ubuntu系统部署tomcat并启用JMX实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装JDK环境 1>.更换阿里云的软件源 [root@zabbix_g ...

  4. PAT (Advanced Level) 1132~1135:1132 模拟 1133模拟(易超时!) 1134图 1135红黑树

    1132 Cut Integer(20 分) 题意:将一个含K(K为偶数)个数字的整数Z割分为A和B两部分,若Z能被A*B整除,则输出Yes,否则输出No. 分析:当A*B为0的时候,不能被Z整除,输 ...

  5. Codestorm:Game with a Boomerang

    题目连接:https://www.hackerrank.com/contests/codestorm/challenges/game-with-a-boomerang 上一篇博客不知怎么复制过来题目, ...

  6. DBlink查看,创建于删除

    1.查看dblink select owner,object_name from dba_objects where object_type='DATABASE LINK'; 或者 select * ...

  7. 剑指offer 链表中环的入口位置

    题目描述 一个链表中包含环,请找出该链表的环的入口结点.   思路:这题需要知道a = c,然后head和slow每次走一步,相遇的时候就是第一个入口交点, 注意:for循环或者while循环之后,一 ...

  8. php 文件缓存 include vs serialize vs json_encode

    大神:http://techblog.procurios.nl/k/news/view/34972/14863/cache-a-large-array-json-serialize-or-var_ex ...

  9. Java 日期与时间

    章节 Java 基础 Java 简介 Java 环境搭建 Java 基本语法 Java 注释 Java 变量 Java 数据类型 Java 字符串 Java 类型转换 Java 运算符 Java 字符 ...

  10. [LeetCode] 932. Beautiful Array 漂亮数组

    For some fixed N, an array A is beautiful if it is a permutation of the integers 1, 2, ..., N, such ...