zoukankan      html  css  js  c++  java
  • CKeditor上传图片 实现所见即所得界面

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

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

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

    引入ckeditor编辑器

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

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

         <script type="text/javascript">
    
                CKEDITOR.replace('editor',{filebrowserUploadUrl : '${path}/ckeditor/uploader?Type=File',
     
                filebrowserImageUploadUrl : '${path}/ckeditor/uploader?Type=Image',
    
                filebrowserFlashUploadUrl : '${path}/ckeditor/uploader?Type=Flash'
     
                });
            </script>

    4.

     这个是你自己的路径,

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

    CKEditorUploadServlet.java

    package ckeditor;
    
    
    import java.io.*;  
    import java.text.SimpleDateFormat;  
    import java.util.*;  
    import javax.servlet.ServletException;  
    import javax.servlet.http.*;  
    import org.apache.commons.fileupload.FileItem;  
    import org.apache.commons.fileupload.FileItemFactory;  
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
    import org.apache.commons.fileupload.servlet.ServletFileUpload;  
    public class CKEditorUploadServlet extends HttpServlet {  
        private static String baseDir;// CKEditor根目录
        private static boolean debug = false;// 是否debug模式  
        private static boolean enabled = false;// 是否开启CKEditor上传  
        private static Hashtable allowedExtensions;//允许的上传文件扩展名  
        private static Hashtable deniedExtensions;// 阻止的上传文件扩展名  
        private static SimpleDateFormat dirFormatter;//目录命名格式:yyyyMM  
        private static SimpleDateFormat fileFormatter;//文件命名格式:yyyyMMddHHmmssSSS  
        /** 
         * Servlet初始化方法 
         */  
        public void init() throws ServletException {  
            // 从web.xml中读取debug模式  
            debug = (new Boolean(getInitParameter("debug"))).booleanValue();  
            if (debug)  
                System.out.println("
    ---- SimpleUploaderServlet initialization started ----");  
         // 格式化目录和文件命名方式 
            dirFormatter = new SimpleDateFormat("yyyyMM");  
            fileFormatter = new SimpleDateFormat("yyyyMMddHHmmssSSS");  
            // 从web.xml中获取根目录名称  
            baseDir = getInitParameter("baseDir");  
            // 从web.xml中获取是否可以进行文件上传  
            enabled = (new Boolean(getInitParameter("enabled"))).booleanValue();  
            if (baseDir == null)  
                baseDir = "/UserFiles/";  
            String realBaseDir = getServletContext().getRealPath(baseDir);  
            File baseFile = new File(realBaseDir);  
            if (!baseFile.exists()) {  
                baseFile.mkdirs();  
            }  
            // 实例化允许的扩展名和阻止的扩展名  
            allowedExtensions = new Hashtable(3);  
            deniedExtensions = new Hashtable(3);  
            // 从web.xml中读取配置信息  
            allowedExtensions.put("File",  
            stringToArrayList(getInitParameter("AllowedExtensionsFile")));  
            deniedExtensions.put("File",  
            stringToArrayList(getInitParameter("DeniedExtensionsFile")));  
            allowedExtensions.put("Image",  
        stringToArrayList(getInitParameter("AllowedExtensionsImage")));  
            deniedExtensions.put("Image",           stringToArrayList(getInitParameter("DeniedExtensionsImage")));  
            allowedExtensions.put("Flash",          stringToArrayList(getInitParameter("AllowedExtensionsFlash")));  
            deniedExtensions.put("Flash",           stringToArrayList(getInitParameter("DeniedExtensionsFlash")));  
            if (debug)  
                System.out.println("---- SimpleUploaderServlet initialization completed ----
    ");  
        }  
        public void doGet(HttpServletRequest request, HttpServletResponse response)  
                throws ServletException, IOException {  
            doPost(request, response);  
        }  
        public void doPost(HttpServletRequest request, HttpServletResponse response)  
                throws ServletException, IOException {  
            if (debug)  
                System.out.println("--- BEGIN DOPOST ---");  
            //response.setContentType("text/html; charset=UTF-8");
            response.setContentType("text/json; charset=utf-8");
            response.setHeader("Cache-Control", "no-cache");  
            PrintWriter out = response.getWriter();  
            // 从请求参数中获取上传文件的类型:File/Image/Flash  
            String typeStr = request.getParameter("Type");  
            if (typeStr == null) {  
                typeStr = "File";  
            }  
            if (debug)  
                System.out.println(typeStr);  
            // 实例化dNow对象,获取当前时间  
            Date dNow = new Date();  
            // 设定上传文件路径  
            String currentPath = baseDir + typeStr + "/"  
                    + dirFormatter.format(dNow);  
            // 获得web应用的上传路径  
            String currentDirPath = getServletContext().getRealPath(currentPath);  
            // 判断文件夹是否存在,不存在则创建
            File dirTest = new File(currentDirPath);  
            if (!dirTest.exists()) {  
                dirTest.mkdirs();  
            }  
            // 将路径前加上web应用名  
            currentPath = request.getContextPath() + currentPath;  
            if (debug)  
                System.out.println(currentDirPath);  
            // 文件名和文件真实路径  
            String newName = "";  
            String fileUrl = "";  
            if (enabled) {  
                // 使用Apache Common组件中的fileupload进行文件上传  
                FileItemFactory factory = new DiskFileItemFactory();  
                ServletFileUpload upload = new ServletFileUpload(factory);  
                try {  
                    List items = upload.parseRequest(request);  
                    Map fields = new HashMap();  
                    Iterator iter = items.iterator();  
                    while (iter.hasNext()) {  
                        FileItem item = (FileItem) iter.next();  
                        if (item.isFormField())  
                            fields.put(item.getFieldName(), item.getString());  
                        else  
                            fields.put(item.getFieldName(), item);  
                    }  
                    // CEKditor中file域的name值是upload 
                    FileItem uplFile = (FileItem) fields.get("upload");  
                 // 获取文件名并做处理  
                    String fileNameLong = uplFile.getName();  
                    fileNameLong = fileNameLong.replace('\', '/');  
                    String[] pathParts = fileNameLong.split("/");  
                    String fileName = pathParts[pathParts.length - 1];  
                    // 获取文件扩展名  
                    String ext = getExtension(fileName);  
                    // 设置上传文件名  
                    fileName = fileFormatter.format(dNow) + "." + ext;  
                    // 获取文件名(无扩展名)   
                    String nameWithoutExt = getNameWithoutExtension(fileName);  
                    File pathToSave = new File(currentDirPath, fileName);  
                    fileUrl = currentPath + "/" + fileName;  
                    if (extIsAllowed(typeStr, ext)) {  
                        int counter = 1;  
                        while (pathToSave.exists()) {  
                            newName = nameWithoutExt + "_" + counter + "." + ext;  
                            fileUrl = currentPath + "/" + newName;  
                            pathToSave = new File(currentDirPath, newName);  
                            counter++;  
                        }  
                        uplFile.write(pathToSave);  
                    } else {  
                        if (debug)  
                            System.out.println("无效的文件类型 " + ext);  
                    }  
                } catch (Exception ex) {  
                    if (debug)  
                        ex.printStackTrace();  
                }  
            } else {  
                if (debug)  
                    System.out.println("未开启CKEditor上传功能");  
            }  
            // CKEditorFuncNum是回调时显示的位置,这个参数必须有  
            String callback = request.getParameter("CKEditorFuncNum");  
            System.out.println(request.getParameter("CKEditorFuncNum"));
            System.out.println(request.getParameter("CKEditor"));
            System.out.println(request.getParameter("langCode"));
            
            String json="{"uploaded" : 1, "fileName" : "fileNameStr", "url":""+fileUrl+"" , "error" : { "message":"successful" } }";
            out.println(json);
            out.flush();  
             out.close();
    
            
            
           // out.println("<script type="text/javascript">");  
          //  out.println("window.parent.CKEDITOR.tools.callFunction(" + "'1'"  
                   // + ",'" + fileUrl + "',' '涓婁紶鎴愬姛fdfdfdf''" + ")");  
          //  out.println("</script>");  
          //  out.flush();  
           // out.close();  
            System.out.println("callback-->"+callback);
            System.out.println("fileUrl-->"+json);
           // response.sendRedirect(request.getContextPath()+"/ATextDao?a="+fileUrl);
            if (debug)  
                System.out.println("--- END DOPOST ---");  
        }  
        /** 
         * 获取文件名的方法 
         */  
        private static String getNameWithoutExtension(String fileName) {  
            return fileName.substring(0, fileName.lastIndexOf("."));  
        }  
        /** 
         * 获取扩展名的方法 
         */  
        private String getExtension(String fileName) {  
            return fileName.substring(fileName.lastIndexOf(".") + 1);  
        }  
        /** 
         * 字符串像ArrayList转化的方法 
         */   
        private ArrayList stringToArrayList(String str) {  
            if (debug)  
                System.out.println(str);  
            String[] strArr = str.split("\|");  
            ArrayList tmp = new ArrayList();  
            if (str.length() > 0) {  
                for (int i = 0; i < strArr.length; ++i) {  
                    if (debug)  
                        System.out.println(i + " - " + strArr[i]);  
                    tmp.add(strArr[i].toLowerCase());  
                }  
            }  
            return tmp;  
        }  
        /** 
         * 判断扩展名是否允许的方法 
         */   
        private boolean extIsAllowed(String fileType, String ext) {  
            ext = ext.toLowerCase();  
            ArrayList allowList = (ArrayList) allowedExtensions.get(fileType);  
            ArrayList denyList = (ArrayList) deniedExtensions.get(fileType);  
            if (allowList.size() == 0) {  
                if (denyList.contains(ext)) {  
                    return false;  
                } else {  
                    return true;  
                }  
            }  
            if (denyList.size() == 0) {  
                if (allowList.contains(ext)) {  
                    return true;  
                } else {  
                    return false;  
                }  
            }  
            return false;  
        }  
    }  

     web.xml

    <servlet>
        <servlet-name>SimpleUploader</servlet-name>
        <servlet-class>ckeditor.CKEditorUploadServlet</servlet-class>
        <init-param>
          <param-name>baseDir</param-name>
          <param-value>/UserFiles/</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>true</param-value>
        </init-param>
        <init-param>
          <param-name>enabled</param-name>
          <param-value>true</param-value>
        </init-param>
        <init-param>
          <param-name>AllowedExtensionsFile</param-name>
          <param-value></param-value>
        </init-param>
        <init-param>
          <param-name>DeniedExtensionsFile</param-name>
          <param-value>  
                    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  
                </param-value>
        </init-param>
        <init-param>
          <param-name>AllowedExtensionsImage</param-name>
          <param-value>jpg|gif|jpeg|png|bmp</param-value>
        </init-param>
        <init-param>
          <param-name>DeniedExtensionsImage</param-name>
          <param-value></param-value>
        </init-param>
        <init-param>
          <param-name>AllowedExtensionsFlash</param-name>
          <param-value>swf|fla</param-value>
        </init-param>
        <init-param>
          <param-name>DeniedExtensionsFlash</param-name>
          <param-value></param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>SimpleUploader</servlet-name>
        <url-pattern>/ckeditor/uploader</url-pattern>
      </servlet-mapping>

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

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

  • 相关阅读:
    程序员开发过程常见问题的解决方法(持续更新中....)
    android 单元测试
    浅谈android binder机制
    Android 写模块化代码注意事项
    Android View 简析
    PackageManager源码分析
    Android N做了啥
    JAVA HTTP POST参数为一个对象或数组
    Spring+Jetty+Jersey+Mybatis整合教程 无web.xml 、webapp版
    IKAnalyzer 添加扩展词库和自定义词
  • 原文地址:https://www.cnblogs.com/ggrm/p/12328031.html
Copyright © 2011-2022 走看看