• ckeditor上传图片


    ckeditor版本4.4.7

    CKEditor的编辑器工具栏中有一项“图片域”,该工具可以贴上图片地址来在文本编辑器中加入图片,但是没有图片上传功能。

    去掉预览中的英文 ,ckeditor/config.js中加上一个配置项:

    config.image_previewText = ' '; 注意引号里面一定要有个空格,不能是空字符串。


    图片上传实现

    第一步:

    要开启图片上传功能。

    找到ckeditor/plugins/image/dialogs/image.js这个文件,CTRL+F搜索下面一段JS:

    id:'Upload',hidden:!0    把感叹号去掉


    这个时候编辑器上已经有上传功能了



    第二步:(这里用struct2实现上传)

    下面是action的代码

    1. package com.sdhf.eam.web.action;
    2. import java.io.File;
    3. import java.io.FileInputStream;
    4. import java.io.FileOutputStream;
    5. import java.io.InputStream;
    6. import java.io.OutputStream;
    7. import java.io.PrintWriter;
    8. import javax.servlet.http.HttpServletResponse;
    9. import org.apache.struts2.ServletActionContext;
    10. import com.sdhf.action._BaseAction;
    11. public class CkeditorUploadAction extends _BaseAction{
    12. private File upload;
    13. private String uploadContentType;
    14. private String uploadFileName;
    15. public File getUpload() {
    16. return upload;
    17. }
    18. public void setUpload(File upload) {
    19. this.upload = upload;
    20. }
    21. public String getUploadContentType() {
    22. return uploadContentType;
    23. }
    24. public void setUploadContentType(String uploadContentType) {
    25. this.uploadContentType = uploadContentType;
    26. }
    27. public String getUploadFileName() {
    28. return uploadFileName;
    29. }
    30. public void setUploadFileName(String uploadFileName) {
    31. this.uploadFileName = uploadFileName;
    32. }
    33. public String execute() throws Exception {
    34. HttpServletResponse response = ServletActionContext.getResponse();
    35. response.setCharacterEncoding("GBK");
    36. PrintWriter out = response.getWriter();
    37. // CKEditor提交的很重要的一个参数
    38. String callback = ServletActionContext.getRequest().getParameter("CKEditorFuncNum");
    39. String expandedName = ""; // 文件扩展名
    40. if (uploadContentType.equals("image/pjpeg") || uploadContentType.equals("image/jpeg")) {
    41. // IE6上传jpg图片的headimageContentType是image/pjpeg,而IE9以及火狐上传的jpg图片是image/jpeg
    42. expandedName = ".jpg";
    43. } else if (uploadContentType.equals("image/png") || uploadContentType.equals("image/x-png")) {
    44. // IE6上传的png图片的headimageContentType是"image/x-png"
    45. expandedName = ".png";
    46. } else if (uploadContentType.equals("image/gif")) {
    47. expandedName = ".gif";
    48. } else if (uploadContentType.equals("image/bmp")) {
    49. expandedName = ".bmp";
    50. } else {
    51. out.println("<script type="text/javascript">");
    52. out.println("window.parent.CKEDITOR.tools.callFunction(" + callback
    53. + ",'','文件格式不正确(必须为.jpg/.gif/.bmp/.png文件)');");
    54. out.println("</script>");
    55. return null;
    56. }
    57. if (upload.length() > 600 * 1024) {
    58. out.println("<script type="text/javascript">");
    59. out.println("window.parent.CKEDITOR.tools.callFunction(" + callback
    60. + ",''," + "'文件大小不得大于600k');");
    61. out.println("</script>");
    62. return null;
    63. }
    64. InputStream is = new FileInputStream(upload);
    65. String uploadPath = ServletActionContext.getServletContext().getRealPath("/images/ckeditor");
    66. String fileName = java.util.UUID.randomUUID().toString(); // 采用UUID的方式命名保证不会重复
    67. fileName += expandedName;
    68. File toFile = new File(uploadPath, fileName);
    69. OutputStream os = new FileOutputStream(toFile);
    70. // 文件复制到指定位置
    71. byte[] buffer = new byte[1024];
    72. int length = 0;
    73. while ((length = is.read(buffer)) > 0) {
    74. os.write(buffer, 0, length);
    75. }
    76. is.close();
    77. os.close();
    78. // 返回“图像”选项卡并显示图片
    79. out.println("<script type="text/javascript">");
    80. out.println("window.parent.CKEDITOR.tools.callFunction(" + callback
    81. + ",'"+ServletActionContext.getRequest().getContextPath()+"/images/ckeditor/"+ fileName + "','')"); // 相对路径用于显示图片
    82. out.println("</script>");
    83. return null;
    84. }
    85. }
    这里有几个注意的地方:
    1、 String uploadPath = ServletActionContext.getServletContext().getRealPath("/images/ckeditor");
    "/images/ckeditor" 为服务器存放的目录,目录一定要存在,不然会报错
    2、
    这个是上传完后前台显示的路径,即下图

    如果路径没有设置好,预览就会没有图片显示,如图


    第三步:写xml配置文件,我这里是spring+struct2
    applicationContext.xml文件加上
    1. <!-- ckeditor 图片上传action -->
    2. <bean id="ckeditorUpload" class="com.sdhf.eam.web.action.CkeditorUploadAction" parent="_baseAction"
    3. scope="prototype">
    4. </bean>

    struts.xml文件加上
    1. <!-- CKEditor 上传图片 -->
    2. <action name="ckeditorUpload" class="ckeditorUpload" method="execute">
    3. </action>

    第四步:
    在ckeditor/config.js加上配置项
    config.filebrowserUploadUrl = ctx+"/ckeditorUpload.action";





  • 相关阅读:
    Struts2的struts.properties文件在哪儿啊?
    StrutsPrepareAndExecuteFilter的作用
    【转】Eclipse配置Struts2问题:ClassNotFoundException: org...dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    怎么找到MyEclipse->add struts capabilities
    图像金字塔
    浅析人脸检测之Haar分类器方法
    SIFT算法学习
    OpenCV3.1使用SIFT
    OpenCV头文件包含问题
    OpenCV例程实现人脸检测
  • 原文地址:https://www.cnblogs.com/ken010127/p/4434115.html
Copyright © 2020-2023  润新知