精华内容
下载资源
问答
  • 富文本编辑器,Rich Text Editor, 简称 RTE, 是一种可内嵌于浏览器,所见即所得的文本编辑器. CSDN的markdown编辑器便是一种富文本编辑器.  蓝莓商城商品详情这一部分的编辑需要使用富文本编辑器.本来想使用...

      富文本编辑器,Rich Text Editor, 简称 RTE, 是一种可内嵌于浏览器,所见即所得的文本编辑器.
    CSDN的markdown编辑器便是一种富文本编辑器.

      蓝莓商城商品详情这一部分的编辑需要使用富文本编辑器.本来想使用百度的ueditor的,但是弄了好久依然还是有问题.所以就放弃了.ueditor配置确实比较复杂,官方的文档也没有很好的说清楚,错误提示不够明了,出错时未提示具体的原因.

      最后找到这个wangEditor.相比ueditor,配置更加简单,使用更加方便.其功能虽不及ueditor多,但是应付一般的需求足够了.
     

    流程说明


     由于对于图片上传整个流程比较复杂,所以本文仅对其进行说明.
     图片上传的流程是,当页面选择图片后,将会创建XMLHttpRequest请求,将图片数据发送给服务端,服务端接收后将图片保存到本地,再将图片路径返回给客户端,客户端接收到图片路径后,创建元素,并将图片路径赋给src,最后再把该元素插入到编辑器中.
     

     // 定义 xhr 发送请求给服务端
      var xhr = new XMLHttpRequest();
       xhr.open('POST', uploadImgServer);

    客户端配置说明

    下载

    直接下载:https://github.com/wangfupeng1988/wangEditor/releases
    使用npm下载:npm install wangeditor (注意 wangeditor 全部是小写字母)
    使用bower下载:bower install wangEditor (前提保证电脑已安装了bower)
    使用CDN://unpkg.com/wangeditor/release/wangEditor.min.js

    调试阶段推荐使用方式1中的未压缩版本,因为如果出现问题也好调试和查找.
    下载后将目录里的wangEditor.js放入工程目录中.只需要这个文件,其他的不需要.
    这里写图片描述
    我放在webapp下的wangEditor路径下.
    这里写图片描述

    前端配置

    引入js文件
    contextPathOfStatic这里是我的项目路径下的static文件夹:http://localhost:8080/lanmei-os/static

    <script type="text/javascript" src="${contextPathOfStatic}/wangEditor/wangEditor.js"></script>

    jsp页面添加

    <div id="editor">
     <!-- 默认显示 -->
       <p>欢迎使用 <b>wangEditor</b> 富文本编辑器</p>
    </div>

    这里我创建3个按钮进行测试

    <button id="editorSetBtn">设置内容</button>
    <button id="editorGetBtn1">获取内容1</button>
    <button id="editorGetBtn2">获取内容2</button>

    js文件编写

    $(function(){
    
        var E = window.wangEditor;
        //这里的id为<div id="editor"中的id.
        var editor = new E('#editor');
        // 配置服务器端地址,也就是controller的请求路径,不带项目路径,前面没有/
        editor.customConfig.uploadImgServer = 'commodity/upload/editor/img';
        //配置属性名称,绑定请求的图片数据
        //controller会用到,可以随便设置,但是一定要与controller一致
        editor.customConfig.uploadFileName = 'img';
        //创建编辑器
        editor.create();
    
        $("#editorSetBtn").click(function(){
            //这是设置编辑器内容
            editor.txt.html("dsafdfadsfdafdsfds");
        })
         $("#editorGetBtn1").click(function(){
          //获取编辑器的内容,带样式
          //一般使用这个获取数据,通过ajax发送给服务端 ,然后服务端以String接收,保存到数据库.
             alert(editor.txt.html());
        })
         $("#editorGetBtn2").click(function(){
            //获取编辑器的内容,不带样式,纯文本
             alert(editor.txt.text());
        })
    })

    程序加载完之后页面就会出现编辑器.
    这里写图片描述

    客户端设置完成

    服务端配置

    WEB层创建Controller

    @Controller
    @RequestMapping(path="/commodity")
    public class CommodityController {
        @Autowired
        AddCommodityService   addCommodityService;
        @Autowired
    private static final Logger logger = LoggerFactory.getLogger("CommodityController.class");
        @ResponseBody
        @RequestMapping(path="/upload/editor/img")
        //RequestParam中的属性名称要和前端定义的一致,上面说明了.所以写"img"
        //使用List<MultipartFile>进行接收
        //返回的是一个Dto类,后面会说明,使用@ResponseBody会将其转换为Json格式数据
        public ImgResultDto uploadEditorImg(@RequestParam("img") List<MultipartFile> list) {    
            //这里是我在web中定义的两个初始化属性,保存目录的绝对路径和相对路径,你们可以自定义    
            String imgUploadAbsolutePath = request.getServletContext().getInitParameter("imgUploadAbsolutePath");
            String imgUploadRelativePath = request.getServletContext().getInitParameter("imgUploadRelativePath");
    
          //服务曾处理数据,返回Dto
            ImgResultDto imgResult
                    = addCommodityService.upLoadEditorImg(list, imgUploadAbsolutePath, 
                                                    imgUploadRelativePath,1);
                return imgResult;           
        }
    
    }

    服务层创建Service类

    服务层创建Service接口类
    
    public interface AddCommodityService {
        /**
         * 上传商品图片
         * @param files
         */
        ImgResultDto upLoadEditorImg(List<MultipartFile> list,
                String UploadAbsolutePath,
                String UploadRelativePath,
                int commodityId);
    }
    服务层创建Service接口实现类

    这里需要注意的是保存地址,我是保存在项目路径下,有的会保存在文件系统根目录下,比如windows可能是D://xxx/xx,linux是/xx/xx,那么返回给客户端的地址就会不一样.需要根据实际情况设置

    public class AddCommodityServiceImpl extends BaseService  implements AddCommodityService{
        @Autowired
        private CommodityMapper commodityMapper;
        @Autowired
        CommodityImageMapper commodityImageMapper;
        @Autowired
        private DruidDataSource dataSource; 
        @Autowired
        private SqlSessionFactoryBean sqlSessionFactory;
    /**
         * 图片上传处理
         */
        @Override
        public ImgResultDto upLoadEditorImg(List<MultipartFile> list,
                String UploadAbsolutePath,
                String UploadRelativePath,
                int commodityId) {
    
            //获取当前登录的管理员
            //CmsAdmin admin = (CmsAdmin) SessionUtils.getSession("currenLogintAdmin");
            CmsAdmin admin = new CmsAdmin("测试用户");
            //工程绝对路径
            String imgUploadAbsolutePath = UploadAbsolutePath;
            //工程相对路径
            String imgUploadRelativePath = UploadRelativePath;
            logger.debug("files.length = " + list.size() );
            ImgResultDto imgResultDto = new ImgResultDto();
            //这里定
            String[] urlData = new String[5];
            int index = 0;
            try {
                for(MultipartFile img : list) {
                  //获取原始文件名,比如你上传的是 图片.jpg,则fileName=图片.jpg
                    String fileName = img.getOriginalFilename();
                    if(fileName == "") {
                        continue;
                    }
                    logger.debug("file  name = " + fileName);
                    String finalPath = imgUploadAbsolutePath + imgUploadRelativePath;  //绝对路径 + 相对路径
                    //为了保证文件名不一致,因此文件名称使用当前的时间戳和4位的随机数,还有原始文件名组成
                    //觉得实际的企业开发不应当使用原始文件名,否则上传者使用一些不好的名字,对于下载者就不好了.
                    //这里为了调试方便,可以加上.
                    String finalFileName =  (new Date().getTime()) + Math.round(Math.random() * 1000)  //文件名动态部分
                                        + fileName; //文件名 原始文件名        
                    File newfile = new File( finalPath + finalFileName);
                    logger.debug("创建文件夹 = " + newfile.mkdirs() +  "  path = " + newfile.getPath());
                    logger.debug("" + newfile.getAbsolutePath());
                    //保存文件到本地
                    img.transferTo(newfile);
                    logger.debug("上传图片成功");
                    //持久化到数据库
                    CommodityImage commodityImage = new  CommodityImage(commodityId, imgUploadRelativePath,
                            finalFileName,(byte)(0),admin.getLoginJobnum(), new Date());
    
                    commodityImageMapper.insert(commodityImage);
                    logger.debug("数据库写入图片成功");  
                    //这里的路径是项目路径+文件路径+文件名称
                    //这么写不是规范的做法,项目路径应是放在前端处理,只需要发送相对路径和文件名称即可,项目路径由前端加上.
                    urlData[index++] = "http://localhost:8080/lanmei-cms/"+imgUploadRelativePath + finalFileName;
                    logger.debug("index = " + index 
                            + "  url = " + urlData[0]);
                    //设置异常代号
                    imgResultDto.setErrno(0);
                }
                imgResultDto.setData(urlData);
                //返回Dto
                return imgResultDto;
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
                return imgResultDto;
            }
    
        }
    
    }

    Dto编写

    Dto 只是一个普通的pojo类,没有业务方法,只有属性和构造器,getter and setter.主要用于层间传输数据,更详细的说明自行百度.

    public class ImgResultDto<T> {
    
        private int  errno;//错误代码
    
        private String[] data;//存放数据
        //构造器
        //getter and setter

    前端接收处理

    添加 customInsert: function (insertImg, result, editor)这段程序
    result是返回的json数据
    因为上面只是上传了一张图片,保存在数组索引0里
    因此通过下面获取图片地址.
    var url = result.data[0];

        // 上传图片 hook 
        uploadImgHooks: {
    
            before: function before(xhr, editor, files) {
                // 图片上传之前触发
    
                // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传
                // return {
                //     prevent: true,
                //     msg: '放弃上传'
                // }
            },
            success: function success(xhr, editor, result) {
                // 图片上传并返回结果,图片插入成功之后触发
                console.log("插入图片成功 success result = " + result.errno + "  path = " + result.data[0] );
            },
            fail: function fail(xhr, editor, result) {
                console.log(" fail result = " + result.errno + "  path = " + result.data[0] );
                // 图片上传并返回结果,但图片插入错误时触发
            },
            error: function error(xhr, editor) {
                // 图片上传出错时触发
                console.log("error result = " + result.errno + "  path = " + result.data[0] );
            },
            timeout: function timeout(xhr, editor) {
                // 图片上传超时时触发
                console.log("timeout result = " + result.errno + "  path = " + result.data );
            },
    
           // 如果服务器端返回的不是 {errno:0, data: [...]} 这种格式,可使用该配置 
            //--------------添加这段程序------------------
            customInsert: function (insertImg, result, editor) {
                // 图片上传并返回结果,自定义插入图片的事件(而不是编辑器自动插入图片!!!)
                // insertImg 是插入图片的函数,editor 是编辑器对象,result 是服务器端返回的结果
    
                // 举例:假如上传图片成功后,服务器端返回的是 {url:'....'} 这种格式,即可这样插入图片:
    
                //-----------修改这里------------------
                //获取返回的图片地址
                var url = result.data[0];
    
                insertImg(url);
    
                console.log("插入图片 url = " + url );
                // result 必须是一个 JSON 格式字符串!!!否则报错
            }
        },
    
        // 是否上传七牛云,默认为 false
        qiniu: false
    
    };

    完成!!!!!!!!!!!!!!!!!

    总结

      本文说明了如何在Java WEB项目中使用富文本编辑器wangEditor,包括前端配置和后端处理.仅说明其简单的用法,业务也未考虑的很周详.更多功能扩展请看官方的说明.
      项目的完整程序请看蓝莓商城项目,后面我会陆续完善.

    展开全文
  • 效果图kindeditor包下类UploadAccessory.java/* */ package com.scrh.web.com.elkan.kindeditor;/* */ /* */ import java.io.File;/* */ import java.io.IOException;/* */ import java.io.PrintStrea...

    效果图




    kindeditor包下类

    UploadAccessory.java

    /*     */ package com.scrh.web.com.elkan.kindeditor;
    /*     */ 
    /*     */ import java.io.File;
    /*     */ import java.io.IOException;
    /*     */ import java.io.PrintStream;
    /*     */ import java.io.PrintWriter;
    /*     */ import java.text.SimpleDateFormat;
    /*     */ import java.util.Arrays;
    /*     */ import java.util.Date;
    /*     */ import java.util.Iterator;
    /*     */ import java.util.List;
    /*     */ import java.util.Random;
    /*     */ import javax.servlet.ServletContext;
    /*     */ import javax.servlet.ServletException;
    /*     */ import javax.servlet.http.HttpServlet;
    /*     */ import javax.servlet.http.HttpServletRequest;
    /*     */ import javax.servlet.http.HttpServletResponse;
    /*     */ import javax.servlet.http.HttpSession;
    /*     */ 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 UploadAccessory extends HttpServlet
    /*     */ {
    /*     */   private static final long serialVersionUID = 1L;
    /*  28 */   protected long MAX_SIZE = 1000000L;
    /*     */ 
    /*  30 */   protected String[] FILETYPES = { "doc", "xls", "ppt", "pdf", "txt", "rar", "zip" };
    /*     */ 
    /*  32 */   protected String UPLOAD_PATH = "";
    /*     */ 
    /*  34 */   protected String id = "";
    /*     */ 
    /*  36 */   protected String attachTitle = "";
    /*     */ 
    /*  38 */   protected boolean isFlag = false;
    /*     */ 
    /*  40 */   protected String tempTitle = "";
    /*     */ 
    /*     */   public void doGet(HttpServletRequest request, HttpServletResponse response)
    /*     */     throws ServletException, IOException
    /*     */   {
    /*  45 */     doPost(request, response);
    /*     */   }
    /*     */ 
    /*     */   public void doPost(HttpServletRequest request, HttpServletResponse response)
    /*     */     throws ServletException, IOException
    /*     */   {
    /*  52 */     response.setContentType("text/html; charset=UTF-8");
    /*  53 */     PrintWriter out = response.getWriter();
    /*  54 */     String savePath = getInitParameter("UPLOAD_PATH");
    /*  55 */     if ((savePath == null) || (savePath.isEmpty())) {
    /*  56 */       out.println(alertMsg("你还没设置上传文件保存的目录路径!"));
    /*  57 */       return;
    /*     */     }
    /*     */ 
    /*  60 */     if (getInitParameter("MAX_SIZE") != null) {
    /*  61 */       this.MAX_SIZE = Integer.parseInt(getInitParameter("MAX_SIZE"));
    /*     */     }
    /*     */ 
    /*  64 */     if (getInitParameter("FILETYPES") != null) {
    /*  65 */       this.FILETYPES = toArray(getInitParameter("FILETYPES"));
    /*     */     }
    /*     */ 
    /*  68 */     String uploadPath = request.getSession().getServletContext().getRealPath("/") + savePath;
    /*     */ 
    /*  71 */     String saveUrl = request.getContextPath() + "/" + savePath;
    /*     */ 
    /*  73 */     if (!ServletFileUpload.isMultipartContent(request)) {
    /*  74 */       out.println(alertMsg("请选择要上传的文件。"));
    /*  75 */       return;
    /*     */     }
    /*     */ 
    /*  78 */     File uploadDir = new File(uploadPath);
    /*  79 */     if (!uploadDir.isDirectory()) {
    /*  80 */       out.println(alertMsg("上传目录不存在。"));
    /*  81 */       return;
    /*     */     }
    /*     */ 
    /*  84 */     if (!uploadDir.canWrite()) {
    /*  85 */       out.println(alertMsg("当前角色对上传目录没有写权限。"));
    /*  86 */       return;
    /*     */     }
    /*     */ 
    /*  89 */     FileItemFactory factory = new DiskFileItemFactory();
    /*  90 */     ServletFileUpload upload = new ServletFileUpload(factory);
    /*  91 */     upload.setHeaderEncoding("UTF-8");
    /*  92 */     String temp = null;
    /*  93 */     String ext = null;
    /*     */     try {
    /*  95 */       List items = upload.parseRequest(request);
    /*  96 */       Iterator itr = items.iterator();
    /*  97 */       while (itr.hasNext()) {
    /*  98 */         FileItem item = (FileItem)itr.next();
    /*  99 */         String fileName = item.getName();
    /* 100 */         temp = item.getName();
    /* 101 */         if ((temp != null) && (!this.isFlag)) {
    /* 102 */           temp = temp.substring(temp.lastIndexOf("\\") + 1);
    /* 103 */           this.tempTitle = temp;
    /* 104 */           this.isFlag = true;
    /*     */         }
    /*     */ 
    /* 107 */         if (item.getFieldName().equals("id")) {
    /* 108 */           this.id = item.getString();
    /*     */         }
    /*     */ 
    /* 111 */         if (item.getFieldName().equals("attachTitle")) {
    /* 112 */           this.attachTitle = item.getString();
    /* 113 */           if (this.attachTitle != null) {
    /* 114 */             this.attachTitle = new String(this.attachTitle.getBytes("ISO8859-1"), "UTF-8");
    /*     */           }
    /*     */         }
    /* 117 */         if (item.isFormField())
    /*     */           continue;
    /* 119 */         if (item.getSize() > this.MAX_SIZE) {
    /* 120 */           out.println(alertMsg("上传文件大小超过限制。"));
    /* 121 */           return;
    /*     */         }
    /*     */ 
    /* 124 */         String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
    /* 125 */         if (!Arrays.asList(this.FILETYPES).contains(fileExt)) {
    /* 126 */           out.println(alertMsg("上传文件扩展名是不允许的扩展名。"));
    /* 127 */           return;
    /*     */         }
    /*     */ 
    /* 130 */         SimpleDateFormat folderNameFormat = new SimpleDateFormat("yyyyMMdd");
    /* 131 */         String realPath = uploadPath + folderNameFormat.format(new Date());
    /* 132 */         File folder = new File(realPath);
    /* 133 */         boolean flag = folder.exists();
    /*     */ 
    /* 135 */         if (!flag) {
    /* 136 */           flag = folder.mkdir();
    /*     */         }
    /*     */ 
    /* 139 */         if (flag) {
    /* 140 */           SimpleDateFormat fileNameFormat = new SimpleDateFormat("yyyyMMddHHmmss");
    /* 141 */           String newFileName = fileNameFormat.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;
    /* 142 */           File uploadedFile = new File(realPath, newFileName);
    /* 143 */           item.write(uploadedFile);
    /* 144 */           saveUrl = saveUrl + folderNameFormat.format(new Date()) + "/" + newFileName;
    /* 145 */           ext = fileExt;
    /*     */         } else {
    /* 147 */           System.out.println(" 文件夹创建失败,请确认磁盘没有写保护并且空件足够");
    /*     */         }
    /*     */ 
    /*     */       }
    /*     */ 
    /* 153 */       if ((this.attachTitle == null) || (this.attachTitle.isEmpty())) {
    /* 154 */         this.attachTitle = this.tempTitle;
    /*     */       }
    /*     */ 
    /* 157 */       out.println(insertAttach(this.id, saveUrl, this.attachTitle, ext));
    /*     */     }
    /*     */     catch (Exception e) {
    /* 160 */       e.printStackTrace();
    /*     */     } finally {
    /* 162 */       out.flush();
    /* 163 */       out.close();
    /* 164 */       this.isFlag = false;
    /*     */     }
    /*     */   }
    /*     */ 
    /*     */   public String alertMsg(String message)
    /*     */   {
    /* 170 */     StringBuilder sb = new StringBuilder("<html>");
    /* 171 */     sb.append("<head>").append("<title>error</title>");
    /* 172 */     sb.append("<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">");
    /* 173 */     sb.append("</head>");
    /* 174 */     sb.append("<body>");
    /* 175 */     sb.append("<script type=\"text/javascript\">");
    /* 176 */     sb.append("alert(\"").append(message).append("\");history.back();</script>");
    /* 177 */     sb.append("</body>").append("</html>");
    /*     */ 
    /* 179 */     return sb.toString();
    /*     */   }
    /*     */ 
    /*     */   public String insertAttach(String id, String url, String title, String ext) {
    /* 183 */     StringBuilder sb = new StringBuilder("<html>");
    /* 184 */     sb.append("<head>").append("<title>Insert Accessory</title>");
    /* 185 */     sb.append("<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">");
    /* 186 */     sb.append("</head>");
    /* 187 */     sb.append("<body>");
    /* 188 */     sb.append("<script type=\"text/javascript\">");
    /* 189 */     sb.append("parent.KE.plugin[\"accessory\"].insert(\"").append(id).append("\",\"");
    /* 190 */     sb.append(url).append("\",\"").append(title).append("\",\"").append(ext).append("\");</script>");
    /* 191 */     sb.append("</body>").append("</html>");
    /* 192 */     return sb.toString();
    /*     */   }
    /*     */ 
    /*     */   public String[] toArray(String filesType)
    /*     */   {
    /* 204 */     if (filesType == null) {
    /* 205 */       return null;
    /*     */     }
    /*     */ 
    /* 208 */     String[] types = filesType.split(",");
    /* 209 */     String[] allowTypes = new String[types.length];
    /* 210 */     int i = 0;
    /* 211 */     for (String type : types) {
    /* 212 */       allowTypes[i] = type;
    /* 213 */       i++;
    /*     */     }
    /*     */ 
    /* 216 */     return allowTypes;
    /*     */   }
    /*     */ }


    /* Location:           C:\Users\yanglei\Desktop\新建文件夹\kindeditorservlet\
     * Qualified Name:     com.elkan.kindeditor.upload.UploadAccessory
     * JD-Core Version:    0.6.0
     */


    UploadImage.java

    /*     */ package com.scrh.web.com.elkan.kindeditor;
    /*     */ 
    /*     */ import com.scrh.web.com.elkan.utils.ImageUtil;
    /*     */ import java.io.File;
    /*     */ import java.io.IOException;
    /*     */ import java.io.PrintStream;
    /*     */ import java.io.PrintWriter;
    /*     */ import java.text.SimpleDateFormat;
    /*     */ import java.util.Arrays;
    /*     */ import java.util.Date;
    /*     */ import java.util.Iterator;
    /*     */ import java.util.List;
    /*     */ import java.util.Random;
    /*     */ import javax.servlet.ServletContext;
    /*     */ import javax.servlet.ServletException;
    /*     */ import javax.servlet.http.HttpServlet;
    /*     */ import javax.servlet.http.HttpServletRequest;
    /*     */ import javax.servlet.http.HttpServletResponse;
    /*     */ import javax.servlet.http.HttpSession;
    /*     */ import org.apache.commons.fileupload.FileItem;
    /*     */ import org.apache.commons.fileupload.FileItemFactory;
    /*     */ import org.apache.commons.fileupload.FileUploadException;
    /*     */ import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    /*     */ import org.apache.commons.fileupload.servlet.ServletFileUpload;
    /*     */ 
    /*     */ public class UploadImage extends HttpServlet
    /*     */ {
    /*     */   private static final long serialVersionUID = 5121794650920770832L;
    /*  37 */   protected int MAX_WIDTH = -1;
    /*     */ 
    /*  39 */   protected int MAX_HEIGHT = -1;
    /*     */ 
    /*  41 */   protected long MAX_SIZE = 1000000L;
    /*     */ 
    /*  43 */   protected String[] IMAGETYPES = { "gif", "jpg", "jpeg", "png", "bmp" };
    /*     */ 
    /*  45 */   protected String UPLOAD_PATH = "";
    /*     */ 
    /*  48 */   protected String id = "";
    /*     */ 
    /*  50 */   protected String imgTitle = "";
    /*     */ 
    /*  52 */   protected int imgWidth = -1;
    /*     */ 
    /*  54 */   protected int imgHeight = -1;
    /*     */ 
    /*  56 */   protected String imgBorder = "";
    /*     */ 
    /*  58 */   protected String resizeImg = "";
    /*     */ 
    /*  60 */   protected boolean isFlag = false;
    /*     */ 
    /*  62 */   protected String tempTitle = "";
    /*     */ 
    /*     */   protected void doGet(HttpServletRequest request, HttpServletResponse response)
    /*     */     throws ServletException, IOException
    /*     */   {
    /*  68 */     response.setContentType("text/html; charset=UTF-8");
    /*  69 */     PrintWriter out = response.getWriter();
    /*  70 */     String savePath = getInitParameter("UPLOAD_PATH");
    /*  71 */     if ((savePath == null) || (savePath.isEmpty())) {
    /*  72 */       out.println(alertMsg("你还没设置上传图片保存的目录路径!"));
    /*  73 */       return;
    /*     */     }
    /*     */ 
    /*  76 */     if (getInitParameter("MAX_SIZE") != null) {
    /*  77 */       this.MAX_SIZE = Integer.parseInt(getInitParameter("MAX_SIZE"));
    /*     */     }
    /*     */ 
    /*  80 */     if (getInitParameter("IMAGETYPES") != null) {
    /*  81 */       this.IMAGETYPES = toArray(getInitParameter("IMAGETYPES"));
    /*     */     }
    /*     */ 
    /*  84 */     String uploadPath = request.getSession().getServletContext().getRealPath("/") + savePath;
    /*     */ 
    /*  87 */     String saveUrl = request.getContextPath() + "/" + savePath;
    /*     */ 
    /*  90 */     if (!ServletFileUpload.isMultipartContent(request)) {
    /*  91 */       out.println(alertMsg("请选择你要上传的图片!"));
    /*  92 */       return;
    /*     */     }
    /*     */ 
    /*  96 */     File uploadDir = new File(uploadPath);
    /*  97 */     if (!uploadDir.isDirectory()) {
    /*  98 */       out.println(alertMsg("上传图片保存的目录不存在。"));
    /*  99 */       return;
    /*     */     }
    /*     */ 
    /* 103 */     if (!uploadDir.canWrite()) {
    /* 104 */       out.println(alertMsg("上传图片保存的目录没有写权限。"));
    /* 105 */       return;
    /*     */     }
    /*     */ 
    /* 109 */     FileItemFactory factory = new DiskFileItemFactory();
    /* 110 */     ServletFileUpload upload = new ServletFileUpload(factory);
    /* 111 */     upload.setHeaderEncoding("UTF-8");
    /* 112 */     List items = null;
    /* 113 */     String temp = null;
    /*     */     try {
    /* 115 */       items = upload.parseRequest(request);
    /* 116 */       Iterator itr = items.iterator();
    /* 117 */       while (itr.hasNext())
    /*     */       {
    /* 119 */         FileItem item = (FileItem)itr.next();
    /*     */ 
    /* 121 */         String fileName = item.getName();
    /* 122 */         temp = item.getName();
    /* 123 */         if ((temp != null) && (!this.isFlag)) {
    /* 124 */           temp = temp.substring(temp.lastIndexOf("\\") + 1);
    /* 125 */           this.tempTitle = temp;
    /* 126 */           this.isFlag = true;
    /*     */         }
    /*     */ 
    /* 129 */         if (item.getFieldName().equals("id")) {
    /* 130 */           this.id = item.getString();
    /*     */         }
    /*     */ 
    /* 134 */         if (item.getFieldName().equals("imgTitle")) {
    /* 135 */           this.imgTitle = item.getString();
    /* 136 */           if (this.imgTitle != null) {
    /* 137 */             this.imgTitle = new String(this.imgTitle.getBytes("ISO8859-1"), "UTF-8");
    /*     */           }
    /*     */         }
    /*     */ 
    /* 141 */         if (item.getFieldName().equals("imgWidth")) {
    /* 142 */           String imgWidth = item.getString();
    /* 143 */           if ((imgWidth != null) && (!imgWidth.isEmpty())) {
    /* 144 */             this.imgWidth = Integer.parseInt(imgWidth);
    /*     */           }
    /*     */         }
    /*     */ 
    /* 148 */         if (item.getFieldName().equals("imgHeight")) {
    /* 149 */           String imgHeight = item.getString();
    /* 150 */           if ((imgHeight != null) && (!imgHeight.isEmpty())) {
    /* 151 */             this.imgHeight = Integer.parseInt(imgHeight);
    /*     */           }
    /*     */         }
    /*     */ 
    /* 155 */         if (item.getFieldName().equals("imgBorder")) {
    /* 156 */           this.imgBorder = item.getString();
    /*     */         }
    /*     */ 
    /* 159 */         long fileSize = item.getSize();
    /* 160 */         if (item.isFormField())
    /*     */           continue;
    /* 162 */         if (fileSize > this.MAX_SIZE) {
    /* 163 */           out.println(alertMsg("上传文件大小超过限制。"));
    /* 164 */           return;
    /*     */         }
    /*     */ 
    /* 168 */         String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
    /* 169 */         if (!Arrays.asList(this.IMAGETYPES).contains(fileExt)) {
    /* 170 */           out.println(alertMsg("上传图片扩展名是不允许的扩展名。"));
    /* 171 */           return;
    /*     */         }
    /*     */ 
    /* 174 */         SimpleDateFormat folderNameFormat = new SimpleDateFormat("yyyyMMdd");
    /* 175 */         String realPath = uploadPath + folderNameFormat.format(new Date());
    /* 176 */         File folder = new File(realPath);
    /* 177 */         boolean flag = folder.exists();
    /*     */ 
    /* 179 */         if (!flag) {
    /* 180 */           flag = folder.mkdir();
    /*     */         }
    /*     */ 
    /* 183 */         if (flag) {
    /* 184 */           SimpleDateFormat fileNameFormat = new SimpleDateFormat("yyyyMMddHHmmss");
    /* 185 */           String newFileName = fileNameFormat.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;
    /* 186 */           File uploadedFile = new File(realPath, newFileName);
    /* 187 */           item.write(uploadedFile);
    /* 188 */           this.resizeImg = uploadedFile.getPath();
    /* 189 */           this.resizeImg = this.resizeImg.replaceAll("\\\\", "/");
    /* 190 */           saveUrl = saveUrl + folderNameFormat.format(new Date()) + "/" + newFileName;
    /*     */         } else {
    /* 192 */           System.out.println(" 文件夹创建失败,请确认磁盘没有写保护并且空件足够");
    /*     */         }
    /*     */ 
    /*     */       }
    /*     */ 
    /* 198 */       String max_width = getInitParameter("MAX_WIDTH");
    /* 199 */       String max_height = getInitParameter("MAX_HEIGHT");
    /* 200 */       if ((max_width != null) && (!max_width.isEmpty())) {
    /* 201 */         this.MAX_WIDTH = Integer.parseInt(max_width);
    /*     */       }
    /* 203 */       if ((max_height != null) && (!max_height.isEmpty())) {
    /* 204 */         this.MAX_HEIGHT = Integer.parseInt(max_height);
    /*     */       }
    /*     */ 
    /* 207 */       if ((this.imgTitle == null) || (this.imgTitle.isEmpty())) {
    /* 208 */         this.imgTitle = this.tempTitle;
    /*     */       }
    /*     */ 
    /* 212 */       if ((this.MAX_WIDTH != -1) || (this.MAX_HEIGHT != -1))
    /*     */       {
    /* 214 */         ImageUtil.resizeImg(this.resizeImg, this.resizeImg, this.MAX_WIDTH, this.MAX_HEIGHT);
    /*     */ 
    /* 216 */         if (this.imgWidth > ImageUtil.ImgWidth) {
    /* 217 */           this.imgWidth = ImageUtil.ImgWidth;
    /*     */         }
    /*     */ 
    /* 220 */         if (this.imgHeight > ImageUtil.ImgHeight) {
    /* 221 */           this.imgHeight = ImageUtil.ImgHeight;
    /*     */         }
    /*     */ 
    /* 225 */         out.println(insertEditor(this.id, saveUrl, this.imgTitle, this.imgWidth, this.imgHeight, this.imgBorder));
    /*     */       }
    /*     */       else {
    /* 228 */         out.println(insertEditor(this.id, saveUrl, this.imgTitle, this.imgWidth, this.imgHeight, this.imgBorder));
    /*     */       }
    /*     */     }
    /*     */     catch (FileUploadException e) {
    /* 232 */       e.printStackTrace();
    /*     */     } catch (Exception e) {
    /* 234 */       e.printStackTrace();
    /*     */     } finally {
    /* 236 */       out.flush();
    /* 237 */       out.close();
    /* 238 */       this.isFlag = false;
    /*     */     }
    /*     */   }
    /*     */ 
    /*     */   protected void doPost(HttpServletRequest request, HttpServletResponse response)
    /*     */     throws ServletException, IOException
    /*     */   {
    /* 246 */     doGet(request, response);
    /*     */   }
    /*     */ 
    /*     */   public String alertMsg(String message)
    /*     */   {
    /* 257 */     StringBuffer sb = new StringBuffer("{\"error\":\"1\",\"message\":\"");
    /* 258 */     sb.append(message).append("\"}");
    /* 259 */     return sb.toString();
    /*     */   }
    /*     */ 
    /*     */   public String insertEditor(String id, String saveUrl, String imgTitle, int imgWidth, int imgHeight, String imgBorder)
    /*     */   {
    /* 281 */     StringBuffer sb = new StringBuffer("<script type\"text/javascript\">");
    /* 282 */     sb.append("parent.KE.plugin[\"image\"].insert(\"").append(id).append("\",\"");
    /* 283 */     sb.append(saveUrl).append("\",\"").append(imgTitle).append("\",\"");
    /* 284 */     sb.append(imgWidth).append("\",\"").append(imgHeight).append("\",\"");
    /* 285 */     sb.append(imgBorder).append("\");");
    /* 286 */     sb.append("</script>");
    /* 287 */     return sb.toString();
    /*     */   }
    /*     */ 
    /*     */   public String[] toArray(String filesType)
    /*     */   {
    /* 299 */     if (filesType == null) {
    /* 300 */       return null;
    /*     */     }
    /*     */ 
    /* 303 */     String[] types = filesType.split(",");
    /* 304 */     String[] allowTypes = new String[types.length];
    /* 305 */     int i = 0;
    /* 306 */     for (String type : types) {
    /* 307 */       allowTypes[i] = type;
    /* 308 */       i++;
    /*     */     }
    /*     */ 
    /* 311 */     return allowTypes;
    /*     */   }
    /*     */ }


    /* Location:           C:\Users\yanglei\Desktop\新建文件夹\kindeditorservlet\
     * Qualified Name:     com.elkan.kindeditor.upload.UploadImage
     * JD-Core Version:    0.6.0
     */

    UploadImageManager.java

    /*     */ package com.scrh.web.com.elkan.kindeditor;
    /*     */ 
    /*     */ import java.io.File;
    /*     */ import java.io.IOException;
    /*     */ import java.io.PrintWriter;
    /*     */ import java.text.SimpleDateFormat;
    /*     */ import java.util.ArrayList;
    /*     */ import java.util.Arrays;
    /*     */ import java.util.Collections;
    /*     */ import java.util.Comparator;
    /*     */ import java.util.Hashtable;
    /*     */ import java.util.List;
    /*     */ import javax.servlet.ServletContext;
    /*     */ import javax.servlet.ServletException;
    /*     */ import javax.servlet.http.HttpServlet;
    /*     */ import javax.servlet.http.HttpServletRequest;
    /*     */ import javax.servlet.http.HttpServletResponse;
    /*     */ import javax.servlet.http.HttpSession;
    /*     */ 
    /*     */ public class UploadImageManager extends HttpServlet
    /*     */ {
    /*     */   private static final long serialVersionUID = -8359652838938248988L;
    /*  23 */   protected String[] FILETYPES = { "gif", "jpg", "jpeg", "png", "bmp" };
    /*     */ 
    /*  25 */   protected String UPLOAD_PATH = "";
    /*     */ 
    /*     */   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    /*     */   {
    /*  29 */     response.setContentType("text/html; charset=UTF-8");
    /*  30 */     PrintWriter out = response.getWriter();
    /*  31 */     String savePath = getInitParameter("UPLOAD_PATH");
    /*  32 */     if ((savePath == null) || (savePath.isEmpty())) {
    /*  33 */       out.println(alertMsg("你还没设置读取上传图片保存的目录路径!"));
    /*  34 */       return;
    /*     */     }
    /*     */ 
    /*  37 */     String rootPath = request.getSession().getServletContext().getRealPath("/") + savePath;
    /*     */ 
    /*  39 */     String rootUrl = request.getContextPath() + "/" + savePath;
    /*     */ 
    /*  41 */     String path = request.getParameter("path") != null ? request.getParameter("path") : "";
    /*  42 */     String currentPath = rootPath + path;
    /*  43 */     String currentUrl = rootUrl + path;
    /*  44 */     String currentDirPath = path;
    /*  45 */     String moveupDirPath = "";
    /*     */ 
    /*  47 */     if (!"".equals(path)) {
    /*  48 */       String str = currentDirPath.substring(0, currentDirPath.length() - 1);
    /*  49 */       moveupDirPath = str.lastIndexOf("/") >= 0 ? str.substring(0, str.lastIndexOf("/") + 1) : "";
    /*     */     }
    /*     */ 
    /*  53 */     String order = request.getParameter("order") != null ? request.getParameter("order").toLowerCase() : "name";
    /*     */ 
    /*  56 */     if (path.indexOf("..") >= 0) {
    /*  57 */       out.println(alertMsg("不允许使用移动到上一级目录"));
    /*  58 */       return;
    /*     */     }
    /*     */ 
    /*  62 */     if ((!"".equals(path)) && (!path.endsWith("/"))) {
    /*  63 */       out.println("Parameter is not valid.");
    /*  64 */       return;
    /*     */     }
    /*     */ 
    /*  67 */     File currentPathFile = new File(currentPath);
    /*  68 */     if (!currentPathFile.isDirectory()) {
    /*  69 */       out.println("Directory does not exist.");
    /*  70 */       return;
    /*     */     }
    /*     */ 
    /*  74 */     List fileList = new ArrayList();
    /*  75 */     if (currentPathFile.listFiles() != null) {
    /*  76 */       for (File file : currentPathFile.listFiles()) {
    /*  77 */         Hashtable hash = new Hashtable();
    /*  78 */         String fileName = file.getName();
    /*  79 */         if (file.isDirectory()) {
    /*  80 */           hash.put("is_dir", Boolean.valueOf(true));
    /*  81 */           hash.put("has_file", Boolean.valueOf(file.listFiles() != null));
    /*  82 */           hash.put("filesize", Long.valueOf(0L));
    /*  83 */           hash.put("is_photo", Boolean.valueOf(false));
    /*  84 */           hash.put("filetype", "");
    /*  85 */         } else if (file.isFile()) {
    /*  86 */           String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
    /*  87 */           hash.put("is_dir", Boolean.valueOf(false));
    /*  88 */           hash.put("has_file", Boolean.valueOf(false));
    /*  89 */           hash.put("filesize", Long.valueOf(file.length()));
    /*  90 */           hash.put("is_photo", Boolean.valueOf(Arrays.asList(this.FILETYPES).contains(fileExt)));
    /*  91 */           hash.put("filetype", fileExt);
    /*     */         }
    /*  93 */         hash.put("filename", fileName);
    /*  94 */         hash.put("datetime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Long.valueOf(file.lastModified())));
    /*  95 */         fileList.add(hash);
    /*     */       }
    /*     */     }
    /*     */ 
    /*  99 */     if ("size".equals(order))
    /* 100 */       Collections.sort(fileList, new SizeComparator());
    /* 101 */     else if ("type".equals(order))
    /* 102 */       Collections.sort(fileList, new TypeComparator());
    /*     */     else {
    /* 104 */       Collections.sort(fileList, new NameComparator());
    /*     */     }
    /*     */ 
    /* 107 */     out.println(toJSONString(currentUrl, currentDirPath, moveupDirPath, fileList));
    /*     */ 
    /* 109 */     out.flush();
    /* 110 */     out.close();
    /*     */   }
    /*     */ 
    /*     */   public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    /*     */   {
    /* 115 */     doGet(request, response);
    /*     */   }
    /*     */ 
    /*     */   public String alertMsg(String message)
    /*     */   {
    /* 126 */     StringBuffer sb = new StringBuffer("<script type\"text/javascript\">");
    /* 127 */     sb.append("alert(\"").append(message).append("\");");
    /* 128 */     sb.append("</script>");
    /* 129 */     return sb.toString();
    /*     */   }
    /*     */ 
    /*     */   public String toJSONString(String currentUrl, String currentDirPath, String moveupDirPath, List<Hashtable<?, ?>> fileList) {
    /* 133 */     StringBuilder sb = new StringBuilder("{\"current_url\":\"");
    /* 134 */     sb.append(currentUrl).append("\",").append("\"current_dir_path\":\"");
    /* 135 */     sb.append(currentDirPath).append("\",\"moveup_dir_path\":\"").append(moveupDirPath).append("\",");
    /* 136 */     sb.append("\"file_list\":[");
    /* 137 */     int i = 0;
    /* 138 */     sb.append("{");
    /* 139 */     for (Hashtable he : fileList) {
    /* 140 */       if (i != fileList.size() - 1) {
    /* 141 */         sb.append("\"filename\":\"").append(he.get("filename")).append("\",");
    /* 142 */         sb.append("\"filesize\":").append(he.get("filesize")).append(",");
    /* 143 */         sb.append("\"filetype\":\"").append(he.get("filetype")).append("\",");
    /* 144 */         sb.append("\"has_file\":").append(he.get("has_file")).append(",");
    /* 145 */         sb.append("\"is_dir\":").append(he.get("is_dir")).append(",");
    /* 146 */         sb.append("\"is_photo\":").append(he.get("is_photo")).append(",");
    /* 147 */         sb.append("\"datetime\":\"").append(he.get("datetime")).append("\"");
    /* 148 */         sb.append("},{");
    /*     */       } else {
    /* 150 */         sb.append("\"filename\":\"").append(he.get("filename")).append("\",");
    /* 151 */         sb.append("\"filesize\":").append(he.get("filesize")).append(",");
    /* 152 */         sb.append("\"filetype\":\"").append(he.get("filetype")).append("\",");
    /* 153 */         sb.append("\"has_file\":").append(he.get("has_file")).append(",");
    /* 154 */         sb.append("\"is_dir\":").append(he.get("is_dir")).append(",");
    /* 155 */         sb.append("\"is_photo\":").append(he.get("is_photo")).append(",");
    /* 156 */         sb.append("\"datetime\":\"").append(he.get("datetime")).append("\"");
    /* 157 */         sb.append("}");
    /*     */       }
    /* 159 */       i++;
    /*     */     }
    /* 161 */     i = 0;
    /* 162 */     sb.append("],\"total_count\":").append(fileList.size()).append("}");
    /* 163 */     return sb.toString();
    /*     */   }
    /*     */   public class NameComparator implements Comparator<Object> {
    /*     */     public NameComparator() {
    /*     */     }
    /* 168 */     public int compare(Object a, Object b) { Hashtable hashA = (Hashtable)a;
    /* 169 */       Hashtable hashB = (Hashtable)b;
    /* 170 */       if ((((Boolean)hashA.get("is_dir")).booleanValue()) && 
    /* 171 */         (!((Boolean)hashB.get("is_dir")).booleanValue()))
    /* 172 */         return -1;
    /* 173 */       if ((!((Boolean)hashA.get("is_dir")).booleanValue()) && 
    /* 174 */         (((Boolean)hashB.get("is_dir")).booleanValue())) {
    /* 175 */         return 1;
    /*     */       }
    /* 177 */       return ((String)hashA.get("filename"))
    /* 178 */         .compareTo((String)hashB.get("filename")); } 
    /*     */   }
    /*     */ 
    /*     */   public class SizeComparator implements Comparator<Object> {
    /*     */     public SizeComparator() {
    /*     */     }
    /*     */ 
    /*     */     public int compare(Object a, Object b) {
    /* 185 */       Hashtable hashA = (Hashtable)a;
    /* 186 */       Hashtable hashB = (Hashtable)b;
    /* 187 */       if ((((Boolean)hashA.get("is_dir")).booleanValue()) && 
    /* 188 */         (!((Boolean)hashB.get("is_dir")).booleanValue()))
    /* 189 */         return -1;
    /* 190 */       if ((!((Boolean)hashA.get("is_dir")).booleanValue()) && 
    /* 191 */         (((Boolean)hashB.get("is_dir")).booleanValue())) {
    /* 192 */         return 1;
    /*     */       }
    /* 194 */       if (((Long)hashA.get("filesize")).longValue() > 
    /* 195 */         ((Long)hashB.get("filesize")).longValue())
    /*     */       {
    /* 196 */         return 1;
    /* 197 */       }if (((Long)hashA.get("filesize")).longValue() < 
    /* 198 */         ((Long)hashB.get("filesize")).longValue())
    /*     */       {
    /* 199 */         return -1;
    /*     */       }
    /* 201 */       return 0;
    /*     */     }
    /*     */   }
    /*     */ 
    /*     */   public class TypeComparator implements Comparator<Object> {
    /*     */     public TypeComparator() {
    /*     */     }
    /*     */ 
    /*     */     public int compare(Object a, Object b) {
    /* 209 */       Hashtable hashA = (Hashtable)a;
    /* 210 */       Hashtable hashB = (Hashtable)b;
    /* 211 */       if ((((Boolean)hashA.get("is_dir")).booleanValue()) && 
    /* 212 */         (!((Boolean)hashB.get("is_dir")).booleanValue()))
    /* 213 */         return -1;
    /* 214 */       if ((!((Boolean)hashA.get("is_dir")).booleanValue()) && 
    /* 215 */         (((Boolean)hashB.get("is_dir")).booleanValue())) {
    /* 216 */         return 1;
    /*     */       }
    /* 218 */       return ((String)hashA.get("filetype"))
    /* 219 */         .compareTo((String)hashB.get("filetype"));
    /*     */     }
    /*     */   }
    /*     */ }


    /* Location:           C:\Users\yanglei\Desktop\新建文件夹\kindeditorservlet\
     * Qualified Name:     com.elkan.kindeditor.upload.UploadImageManager
     * JD-Core Version:    0.6.0
     */


    utils包

    ImageUtil.java

    /*    */ package com.scrh.web.com.elkan.utils;
    /*    */ 
    /*    */ import com.sun.image.codec.jpeg.JPEGCodec;
    /*    */ import com.sun.image.codec.jpeg.JPEGImageEncoder;
    /*    */ import java.awt.Graphics;
    /*    */ import java.awt.Image;
    /*    */ import java.awt.image.BufferedImage;
    /*    */ import java.io.File;
    /*    */ import java.io.FileOutputStream;
    /*    */ import java.io.IOException;
    /*    */ import javax.imageio.ImageIO;
    /*    */ 
    /*    */ public class ImageUtil
    /*    */ {
    /* 21 */   public static int ImgWidth = -1;
    /*    */ 
    /* 23 */   public static int ImgHeight = -1;
    /*    */ 
    /*    */   static {
    /* 26 */     System.setProperty("jmagick.systemclassloader", "no");
    /*    */   }
    /*    */ 
    /*    */   public static void resizeImg(String imgsrc, String imgdist, int widthdist, int heightdist)
    /*    */   {
    /*    */     try
    /*    */     {
    /* 44 */       File srcfile = new File(imgsrc);
    /* 45 */       if (!srcfile.exists()) {
    /* 46 */         return;
    /*    */       }
    /* 48 */       Image src = ImageIO.read(srcfile);
    /* 49 */       ImgWidth = src.getWidth(null);
    /* 50 */       ImgHeight = src.getHeight(null);
    /* 51 */       if (ImgWidth < widthdist)
    /* 52 */         widthdist = ImgWidth;
    /*    */       else {
    /* 54 */         ImgWidth = widthdist;
    /*    */       }
    /* 56 */       if (ImgHeight < heightdist)
    /* 57 */         heightdist = ImgHeight;
    /*    */       else {
    /* 59 */         ImgHeight = heightdist;
    /*    */       }
    /* 61 */       BufferedImage tag = new BufferedImage(widthdist, heightdist, 1);
    /*    */ 
    /* 63 */       tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, 4), 0, 0, null);
    /* 64 */       FileOutputStream out = new FileOutputStream(imgdist);
    /* 65 */       JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    /* 66 */       encoder.encode(tag);
    /* 67 */       out.close();
    /*    */     } catch (IOException ex) {
    /* 69 */       ex.printStackTrace();
    /*    */     }
    /*    */   }
    /*    */ }


    /* Location:           C:\Users\yanglei\Desktop\新建文件夹\kindeditorservlet\
     * Qualified Name:     com.elkan.utils.ImageUtil
     * JD-Core Version:    0.6.0
     */

    web.xml

    <!-- 图片上传的SERVLET -->
    <servlet>
    <servlet-name>UploadImage</servlet-name>
    <servlet-class>com.elkan.kindeditor.upload.UploadImage</servlet-class>
    <!-- 上传图片保存的目录 -->
    <init-param>
    <param-name>UPLOAD_PATH</param-name>
    <param-value>uploadImg/</param-value>
    </init-param>
    <!-- 限制上传图片的大小,单位字节(缺省值为1MB) -->
    <init-param>
    <param-name>MAX_SIZE</param-name>
    <param-value>1024000</param-value>
    </init-param>
    <init-param>
    <!-- 上传图片的类型(缺省值为gif, jpg, jpeg, png, bmp) -->
    <param-name>IMAGETYPES</param-name>
    <param-value>jpg,png,bmp,jpeg,gif</param-value>
    </init-param>
    <!-- 上传图片的宽度,大于此宽度时图片会被压缩(缺省为不限定) -->
    <init-param>
    <param-name>MAX_WIDTH</param-name>
    <param-value>500</param-value>
    </init-param>
    <!-- 上传图片的高度,大于此高度时图片会被压缩(缺省为不限定) -->
    <init-param>
    <param-name>MAX_HEIGHT</param-name>
    <param-value>500</param-value>
    </init-param>
    </servlet>
    <!-- 图片上传管理的SERVLET -->
    <servlet>
    <servlet-name>UploadImageManager</servlet-name>
    <servlet-class>com.elkan.kindeditor.upload.UploadImageManager</servlet-class>
    <!-- 上传图片保存的目录 -->
    <init-param>
    <param-name>UPLOAD_PATH</param-name>
    <param-value>uploadImg/</param-value>
    </init-param>
    </servlet>
    <!-- 附件上传的SERVLET -->
    <servlet>
    <servlet-name>UploadAccessory</servlet-name>
    <servlet-class>com.elkan.kindeditor.upload.UploadAccessory</servlet-class>
    <!-- 上传附件保存的目录 -->
    <init-param>
    <param-name>UPLOAD_PATH</param-name>
    <param-value>uploadAttach/</param-value>
    </init-param>
    <!-- 上传附件的大小,单位字节(缺省为1MB) -->
    <init-param>
    <param-name>MAX_SIZE</param-name>
    <param-value>1000000</param-value>
    </init-param>
    <!-- 上传文件的类型(缺省为doc, xls, ppt, pdf, txt, rar, zip) -->
    <init-param>
    <param-name>FILETYPES</param-name>
    <param-value>doc,xls,ppt,zip,rar,txt</param-value>
    </init-param>
    </servlet>
    <servlet-mapping>
    <servlet-name>UploadImage</servlet-name>
    <url-pattern>/uploadImage.html</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>UploadImageManager</servlet-name>
    <url-pattern>/uploadImgManager.html</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>UploadAccessory</servlet-name>
    <url-pattern>/uploadAccessory.html</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <login-config>
    <auth-method>BASIC</auth-method>
    </login-config>

    editor.jsp富文本输入文件

    <%@page contentType="text/html" language="java" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
      <%@ include file="/comm.jsp"%>
        <title>KindEditor新闻新增编辑器</title>
    <script type="text/javascript" src="${pageContext.request.contextPath}/kindeditor/kindeditor-min.js" charset="UTF-8"></script>
    <script charset="utf-8" src="${ctx}/report/editor.js"></script>
    <script type="text/javascript">
    KE.show({
    id : "editor",
        width : "840px",
        height : "480px",   
        resizeMode : 1,
        allowFileManager : true,
        /*图片上传的SERVLET路径*/
        imageUploadJson : "${pageContext.request.contextPath}/uploadImage.html", 
        /*图片管理的SERVLET路径*/     
        fileManagerJson : "${pageContext.request.contextPath}/uploadImgManager.html",
        /*允许上传的附件类型*/
        accessoryTypes : "doc|xls|pdf|txt|ppt|rar|zip",
        /*附件上传的SERVLET路径*/
        accessoryUploadJson : "${pageContext.request.contextPath}/uploadAccessory.html"
    });
    </script>
      </head>
      
      <body bgcolor="#EEF2FB" style="width: 100%;">
      <div style="height: auto;  padding-left: 2%;">
      <div>
      <form  id="ff" name="ff" method="post">
    <h3>KindEditor新增新闻编辑器</h3>
    <tr>
              <td>新闻标题</td>
              <td><input type="text" id="newstitle" name="newstitle" /></td>
              </tr>
              <tr>
              <td>新闻类型</td>
              <td>
                 <select id="newstype" name="newstype">
                  <option>国内新闻</option>
                  <option>国际新闻</option>
                  <option>体育新闻</option>
                  <option>娱乐新闻</option>
                </select>
               </td>
               </tr>
              <tr>
              <td>新闻来源</td>
              <td><input type="text" id="souce" name="souce" /></td>
              </tr>
              <tr>
              <td>新闻作者</td>
              <td><input type="text" id="author" name="author" /></td>
              </tr>
    <textarea id="editor" name="editor" rows="" cols="" style="width:840px;height:600px;visibility:hidden;">
    </textarea>
    <input type="submit" name="submit" value="输出内容" οnclick="submitForm()" style="cursor: pointer;">
    </form>
      </div>
      </div>
      </body>
    </html>

    editor.jsp富文本再输入文件

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%
    request.setCharacterEncoding("UTF-8");
    String htmlData = request.getParameter("content1") != null ? request.getParameter("content1") : "";
    %>
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8" />
    <%@ include file="/comm.jsp"%>
    <title>警方新闻(新增/修改)</title>
    <link rel="stylesheet" href="${ctx}/kindeditor/themes/default/default.css" />
    <link rel="stylesheet" href="${ctx}/kindeditor/plugins/code/prettify.css" />
    <script charset="utf-8" src="${ctx}/kindeditor/kindeditor.js"></script>
    <script charset="utf-8" src="${ctx}/kindeditor/lang/zh_CN.js"></script>
    <script charset="utf-8" src="${ctx}/kindeditor/plugins/code/prettify.js"></script>
    <script>
    KindEditor.ready(function(K) {
    var editor1 = K.create('textarea[name="content1"]', {
    cssPath : 'kindeditor/plugins/code/prettify.css',
    uploadJson : 'kindeditor/jsp/upload_json.jsp',
    fileManagerJson : 'kindeditor/jsp/file_manager_json.jsp',
    allowFileManager : true,
    afterCreate : function() {
    var self = this;
    K.ctrl(document, 13, function() {
    self.sync();
    document.forms['example'].submit();
    });
    K.ctrl(self.edit.doc, 13, function() {
    self.sync();
    document.forms['example'].submit();
    });
    }
    });
    prettyPrint();
    });
    </script>
    </head>
    <body>
    <%=htmlData%>
    <form name="example" method="post" action="demo.jsp">
    <div align="center">
    <table cellpadding="5" class="tb2" width="100%">
    <tr>
    <h4>文章编辑</h4>
               <table>
            <tr>
              <td>标题</td>
              <td><input type="text" name="news.title" /></td>
              <td>作者</td>
              <td><input type="text" name="news.author" /></td>
              <td>类型</td>
              <td>
                 <select name="news.types">
                  <option>国内新闻</option>
                  <option>国际新闻</option>
                  <option>体育新闻</option>
                  <option>娱乐新闻</option>
                </select>
               </td>
              <td>发布单位</td>
              <td>
                 <select name="news.department">
                  <option>办公室</option>
                  <option>宣传部</option>
                  <option>文艺团</option>
                  <option>工会</option>
                </select>
               </td>
            </tr>
          </table>
    </tr>
    <textarea name="content1" cols="100" rows="8" style="width:900px;height:300px;visibility:hidden;"><%=htmlspecialchars(htmlData)%></textarea>
    <br />
    <input type="submit" name="button" value="提交内容" /> (提交快捷键: Ctrl + Enter)
    </table>
    </div>
    </form>
    </body>
    </html>
    <%!
    private String htmlspecialchars(String str) {
    str = str.replaceAll("&", "&amp;");
    str = str.replaceAll("<", "&lt;");
    str = str.replaceAll(">", "&gt;");
    str = str.replaceAll("\"", "&quot;");
    return str;
    }
    %>

    展开全文
  • 今天给前端做一个功能,着实费了一番功夫。 前提:前端说让我写个方法,在ueditor中配置接口路径后,ueditor会自动调用接口,要实现单图、多图、视频等上传。 第一个坑:从ueditor过来的请求,参数不在requestBody...

    今天给前端做一个功能,着实费了一番功夫。

    前提:前端说让我写个方法,在ueditor中配置接口路径后,ueditor会自动调用接口,要实现单图、多图、视频等上传。

    第一个坑:从ueditor过来的请求,参数不在requestBody中,而是在paramter中。所以对应的参数要去request中取。

    第二个坑:不知道流怎么从request中获取,找了一些大牛的博客,找到了解决方法。

    第三个坑:原来不知道七牛提供了一个可以直接将外网图片url直接存到七牛服务器上,并返回七牛上的url。

    好了,话不多说,上代码!

    @RequestMapping("/uploadAction")
    @ResponseBody
    public String uploadAction(HttpServletRequest request)throws Exception {
        String action = request.getParameter("action");
        MultipartFile upfile = null;
        if(action.equals("uploadimage") || action.equals("uploadvideo")){
            //如果是在request中传流,就要转换成这种request,才能取到文件
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            upfile = multipartRequest.getFile("upfile");
        }
        System.out.println("uploadAction------->action:"+action);
        JSONObject json = new JSONObject();
        String uuid = UUID.randomUUID().toString();
        QiniuUploadResultVo qiniuUploadResultVo = null;
        try{
            request.setCharacterEncoding("UTF-8");
            switch (action){
                case"config":
                    String rootPath = this.getClass().getResource("/").getPath();
                    File jsonFile = ResourceUtils.getFile(rootPath+"config.json");
                    String configJson = FileUtils.readFileToString(jsonFile,"UTF-8");
                    return configJson;
                case"uploadimage":
                    qiniuUploadResultVo = qiNiuService.upload(upfile.getInputStream(),"weiyou/"+uuid);
                    qiniuUploadResultVo.setKey("weiyou/"+uuid);
                    json.put("data",qiniuUploadResultVo);
                    return json.toJSONString();
                case"uploadvideo":
                    qiniuUploadResultVo = qiNiuService.upload(upfile.getInputStream(),"weiyou/"+uuid);
                    qiniuUploadResultVo.setKey("weiyou/"+uuid);
                    json.put("data",qiniuUploadResultVo);
                    return json.toJSONString();
                case"catchimage":
                    //处理多张外网图片上传七牛逻辑
                    //下面这行代码注意,ueditor很坑,它请求的数组的key是source[],而不是source!!!!
                    String[] source = request.getParameterValues("source[]");
                    List<String> list = Arrays.asList(source);
                    //这个方法就是下面的
                    List<JSONObject> result = qiNiuService.fetch(list);
                    return JSONObject.toJSONString(result).toString();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return "";
    }

     

    public List<JSONObject> fetch(List<String> list){
        Auth auth = Auth.create(accessKey, secretKey);
        BucketManager bucketManager = new BucketManager(auth);
        List<JSONObject> result = new ArrayList<>();
        try{
            if(list != null && list.size() > 0){
                for(int i = 0;i<list.size();i++){
                    String uuid = UUID.randomUUID().toString();
                    DefaultPutRet putret = bucketManager.fetch(list.get(i), bucket, uuid);
                    String url = baseUrl +"/" + uuid;
                    String source = "source["+i+"]";
                    String state = "SUCCESS";
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("url",url);
                    jsonObject.put("source",source);
                    jsonObject.put("state",state);
                    result.add(jsonObject);
                }
            }
        }catch (QiniuException ex) {
            System.err.println(ex.response.toString());
        }
        return  result;
    
    }

    还有问题的,给我留言!

    展开全文
  • 1.import 引入ueditor时,在封装组件中引入,不要在mian.js内引入,在main.js内引入会造成 1.Uncaught SyntaxError: Unexpected token : ...2.使用ueditor时,需要注意在引入编辑器的样式,在ueditor.c...

     

     

    1.import 引入ueditor时,在封装组件中引入,不要在mian.js内引入,在main.js内引入会造成

    1.Uncaught SyntaxError: Unexpected token :

    这种错误,属于是跨域问题,目前不清楚是什么原因和原理,但是引入时尽量在使用的组件中引入,不要全局引入

    2.使用ueditor时,需要注意在引入编辑器的样式,在ueditor.config.js内 添加代码:

     

    window.UEDITOR_HOME_URL = "static/ueditor/";

    因为解压后ueditor文件放在Vue项目的static下,ueditor是放到项目的ueditor编辑器的文件夹名,所以路径如上

     

    项目代码:

    ue.vue:

    <template>
      <div>
        <script :id=id type="text/plain"></script>
      </div>
    </template>
    <script>
      import '../../../static/ueditor/ueditor.config.js'
      import '../../../static/ueditor/ueditor.all.js'
      import '../../../static/ueditor/lang/zh-cn/zh-cn.js'
      export default {
        name: 'UE',
        data () {
          return {
            editor: null
          }
        },
        props: {
          defaultMsg: {
            type: String
          },
          config: {
            type: Object
          },
          id: {
            type: String
          },
        },
        mounted() {
          const _this = this;
          this.editor = UE.getEditor(this.id, this.config); // 初始化UE
          this.editor.addListener("ready", function () {
            _this.editor.setContent(_this.defaultMsg); // 确保UE加载完成后,放入内容。
          });
        },
        methods: {
          getUEContent() { // 获取内容方法
            return this.editor.getContent()
          },
          getUEContentTxt() { // 获取纯文本内容方法
            return this.editor.getContentTxt()
          }
        },
        destroyed() {
          this.editor.destroy();
        }
      }
    </script>
    

     

    ueditorDemo.vue:

    <template>
      <div id="app">
          <div>
            <UE :defaultMsg=defaultMsg :config=config :id=ue1 ref="ue1"></UE>
          </div>
      </div>
    </template>
    
    <script>
      import UE from '@/components/ueditor/ueditor.vue'
    
      export default{
          components: {UE},
          data() {
            return {
              //---- start ----- ue 编辑器相关
              config: {
                initialFrameWidth: null,
                initialFrameHeight: 350,
                toolbars: [
                  ['fullscreen', 'source', '|', 'undo', 'redo', '|',
                    'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|',
                    'rowspacingtop', 'rowspacingbottom', 'lineheight', '|',
                    'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|',
                    'directionalityltr', 'directionalityrtl', 'indent', '|',
                    'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|',
                    'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|',
                    'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'webapp', 'pagebreak', 'template', 'background', '|',
                    'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|',
                    'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|',
                    'print', 'preview', 'searchreplace', 'drafts', 'help']
                ],//'simpleupload',单个图片上传,不显示
              },
              defaultMsg: '',
              ue1: "ue1", // 不同编辑器必须不同的id
              //---- end----- ue 编辑器相关
            }
          },
          methods: {
               // 获取内容方法
                // this.$refs.uel.getUeContent();
          }
      }
    
    </script>
    

    UEditor中的方法: 

    1. 实例化编辑器到id为 container 的 dom 容器上:
       var ue = UE.getEditor('container');
    2. 设置编辑器内容:
        ue.setContent('<p>hello!</p>');
    3. 追加编辑器内容:
        ue.setContent('<p>new text</p>', true);
    4. 获取编辑器html内容:
        var html = ue.getContent();
    5. 获取纯文本内容:
        ue.getContentTxt();
    6. 获取保留格式的文本内容:
        ue.getPlainTxt();
    7. 判断编辑器是否有内容:
        ue.hasContents();
    8. 让编辑器获得焦点:
        ue.focus();
    9. 让编辑器失去焦点
        ue.blur();
    10. 判断编辑器是否获得焦点:
        ue.isFocus();
    11. 设置当前编辑区域不可编辑:
        ue.setDisabled();
    12. 设置当前编辑区域可以编辑:
        ue.setEnabled();
    13. 隐藏编辑器:
        ue.setHide();
    14. 显示编辑器:
        ue.setShow();
    15. 清空内容:
        ue.execCommand('cleardoc');
    16. 读取草稿箱:
        ue.execCommand('drafts');
    17. 清空草稿箱:
      ue.execCommand('clearlocaldata');
    methods:{
          getUEContent: function(){
            return this.editor.getContent();
          },
          getContentTxt: function(){
            return this.editor.getContentTxt();
          },
          setUEContent:function (data) {
            let _this = this;
            //this.editor.addListener('ready',function () {// 添加监听事件,否则会报错"cannot set property 'innerHTML' of null" ready 编辑器准备就绪后会触发该事件
             // _this.editor.setContent(data);
            //});
            // 补充,ueditor已经有ready函数,在加载完执行 --- 后知后觉
               this.editor.ready(function(){
                    _this.editor.setContent(data);
                })
           }

    2.vue使用ueditor时,打包后样式丢失问题

    封装ue组件来初始化ueditor后,在要引入ue组件的父组件中定义config时在里面加上

    UEDITOR_HOME_URL: 'static/ueditor/',这样打包就不会丢失样式了,例如:

    第一个箭头id一定要有,并且不重复

    第二个箭头就是上面所说的,解决打包后样式不丢失的办法

    特别注意不要手贱在static的前面加上/

    3.后端图片上传的配置:以下是上传到本地Tomcat为例

     /* 上传图片配置项 */
        "imageActionName": "uploadimage", /* 执行上传图片的action名称 */
        "imageFieldName": "upfile", /* 提交的图片表单名称 */
        "imageMaxSize": 2048000, /* 上传大小限制,单位B */
        "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
        "imageCompressEnable": true, /* 是否压缩图片,默认是true */
        "imageCompressBorder": 1600, /* 图片压缩最长边限制 */
        "imageInsertAlign": "none", /* 插入的图片浮动方式 */
        "imageUrlPrefix": "http://192.168.1.118:8080", /* 图片访问路径前缀 */
        "localSavePathPrefix":"D:\\Program Files\\apache-tomcat-8.0.50\\webapps",
        "imagePathFormat": "/ueImg/{yyyy}{mm}{dd}/{time}{rand:6}",
    /* 上传保存路径,可以自定义保存路径和文件名格式 */
                                    /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
                                    /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
                                    /* {time} 会替换成时间戳 */
                                    /* {yyyy} 会替换成四位年份 */
                                    /* {yy} 会替换成两位年份 */
                                    /* {mm} 会替换成两位月份 */
                                    /* {dd} 会替换成两位日期 */
                                    /* {hh} 会替换成两位小时 */
                                    /* {ii} 会替换成两位分钟 */
                                    /* {ss} 会替换成两位秒 */
                                    /* 非法字符 \ : * ? " < > | */
                                    /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */

    上传的具体代码中:
                state.putInfo( "title", picName);//文件名填入此处
                state.putInfo( "group", "");//所属group填入此处
                state.putInfo( "url", savePath);//文件访问的url填入此处
                return state;

    红色地方重要,是上传完后返回到前端的访问路径

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 文本编辑器用:kz.layedit 富文本编辑器拓展 HTML <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"> <title>l
  • [{"tag": "p","attrs": [],"children": ["欢迎使用 ",{"tag": "b","attrs": [],"children": ["wangEditor"]}," 富文本编辑器"]},{"tag": "img","attrs": [{"name": "src","value": ...
  • 最近在写一个自己的后台管理系统(主要是写着玩的,用来熟悉后端java的知识,目前只是会简单的写点接口),想在项目中编写一个发布新闻文章的功能,想到了使用百度的ueditor富文本编辑器,网上找了很多java版本的资料...
  • 说明: ueditor富文本编辑器实现图片上传至oss以及基础config需要使用java后端处理 步骤: 1.下载源码: https://github.com/fex-team/ueditor/releases/tag/v1.4.3.3 2.拷贝源码: 如:F:\ueditor\ueditor-1.4.3.3\...
  • 概述这两款编辑器都是采用JavaScript编写,不需要引用dll,可以与主流后端编程语言【Java , .NET,PHP,ASP等】无缝对接,体积小,可以将现有的TextArea变成富文本编辑器。下面来分别介绍下:什么是KindEditor?Kind.....
  • layui.use('layedit', function(){var layedit = layui.layedit;layedit.set({uploadImage: {url: '/admin/goods/uploadImage' //接口url,type: 'post', //默认postsuccess:...//构建一个默认的编辑器var index = ...
  • 富文本编辑器:ueditor其实富文本编辑器已经有防止xss注入功能,但是你服务端程序在接收的时候在做一次转义,否则有可能然后前端验证直接提交数据导致被xss攻击。为了节省后端程序开销则在前端 显示的时候在此对代码...
  • 最近在写一个自己的后台管理系统(主要是写着玩的,用来熟悉后端java的知识,目前只是会简单的写点接口),想在项目中编写一个发布新闻文章的功能,想到了使用百度的ueditor富文本编辑器,网上找了很多java版本的资料...
  • JAVA 集成 Ueditor 百度富文本编辑器(增加了可自定义上传的路径),本菜文笔有限、水平有限;大胆的对后端代码做了些修整。如有问题请不吝赐教。
  • Html富文本编辑器

    2018-02-21 17:41:00
    这两款编辑器都是采用JavaScript编写,不需要引用dll,可以与主流后端编程语言【Java , .NET,PHP,ASP等】无缝对接,体积小,可以将现有的TextArea变成富文本编辑器。下面来分别介绍下: 什么是KindEditor...
  • 最近在写一个自己的后台管理系统(主要是写着玩的,用来熟悉后端java的知识,目前只是会简单的写点接口),想在项目中编写一个发布新闻文章的功能,想到了使用百度的ueditor富文本编辑器,网上找了很多java版本的...
  • JAVA后端主流开发框架

    2020-07-18 21:12:10
    JavaWeb专业版,企业级开发框架SpringBoot+Layui+Thymeleaf+MybatisPlus开发权限(RBAC)及内容管理框架,框架中集成了权限管理、模块管理,数据库管理、富文本编辑器(已集成ueditor,kindeditor),后台支持多主题切换、...
  • Vue项目中使用ueditor富文本编辑器 Ueditor项目下载地址:http://ueditor.baidu.com/website/ 这里使用php版本(如果后端java就下载完整版和php版,在完整源码版中有java的代码,但是里面没有前端需要的...
  • 前面写了一篇关于vue整合wangEditor富文本编辑器,今天介绍由百度开源的UEditor富文本编辑器。两者相比之下:wangEditor比较轻量,易于使用。Ueditor稍显臃肿。不过功能齐全,其中有一些配置稍微复杂一点,话不多说...
  • 一、配置 1、maven配置: 注:注释掉的jar包配置是因为使用百度提供的源码时无法做到...将config.json文件放到resource下,ueditor的js文件放入js目录下,后端java配置代码可随意放入 修改ueditor.config...
  • 3、富文本编辑器,集成的是kindeditor,本来想集成百度的Ueditor的,配置起来没这个简单,呵呵,注意,本人的电脑foxfire浏览器无法多图上传,360浏览器可以,应该是跟flash有关 4、过滤器,在java中好像叫拦截器 ...
  • UEditor 1.4.0 版本对之前的配置方式进行了简化,具体请参见:后端请求规范,为了适应这次升级,JAVA 后台也进行了重写,跟之前的版本差别较大,升级的用户注意阅读本文档。 本文档介绍 UEditor JAVA
  • 企业研发人员,所有初级者均可,包括php,java,asp,jsp,c,c#,前端开发工程师,后端开发工程师等。
  • 项目后端使用了springboot,maven,前端使用了ckeditor富文本编辑器。目前从html转换的word为doc格式,而图片处理支持的是docx格式,所以需要手动把doc另存为docx,然后才可以进行图片替换。一.添加maven依赖主要...
  • Java解析html文本

    千次阅读 2018-08-28 21:07:53
    公司是前后端分离的架构,有个功能前端使用了富文本编辑器,通过该富文本编辑器得到的html文本与实际要求有一定差距,但是前端又处理不了,因此该处理只能由我们后端处理了。  第一想法是通过处理XML文档的方式...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 127
精华内容 50
关键字:

富文本编辑器java后端

java 订阅