UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量、可定制、用户体验优秀等特点。

开源基于BSD协议,所有源代码在协议允许范围内可自由修改和使用。

 

百度UEditor的推出,可以帮助不少网站开发者在开发富文本编辑器所遇到的难题,节约开发者因开发富文本编辑器所需要的大量时间,有效降低了企业的开发成本。 

 

优点

1、体积小巧,性能优良,使用简单 

2、分层架构,方便定制与扩展 

3、满足不同层次用户需求,更加适合团队开发 

4、丰富完善的中文文档 

5、多个浏览器支持:Mozilla, MSIE, FireFox, Maxthon,Safari 和Chrome 

6、更好的使用体验 

7、拥有专业QA团队持续支持,已应用在百度各大产品线上 

 

 

使用步骤 

1.添加jar包 jar包位置:文件根目录下jsp的lib文件夹下,把jar包复制到web-inf下的lib文件夹下buildpath 

 

2.修改config.js中的URL路径,修改为UEidtor插件在自己工程中的正确根路径

 

3.在jsp文件中先引入配置文件config.js然后再源码文件all.js(注意顺序) 

 

4.加载容器和实例化容器

 

 

 上传图片 

1.修改config.js配置文件URL为插件根目录,一般是绝对路径。 

 

2.修改config.json中上传图片配置项中的访问路径前缀为项目名称,根据情况修改上传文件路径和访问路径。 

配置正确之后UEditor有上传功能帮助我们上传图片。

 但是上传路径会在项目部署的临时文件夹下。 tomcat取消部署后,上传文件就会和项目部署文件一起被删除 

 

3.实现把图片上传到自定义路径  

  在处理上传后的文件名称的时候注意不要出现中文  

要不然还需要做处理才能正确读取文件! 

 

4.(1)首先在jsp中覆盖UEidtor获取路径的方法 

//覆盖UEditor中获取路径的方法

     UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl;

     UE.Editor.prototype.getActionUrl = function(action) {

     //判断路径   这里是config.json 中设置执行上传的action名称

         if (action == 'uploadimage') {

             return 'http://localhost:8080/maven-web/uploadImage.do';

         } else if (action == 'uploadvideo') {

             return '';

         } else {

             return this._bkGetActionUrl.call(this, action);

         }

     }

 

 

 

(2)首先在springmvc配置文件中配置

 <!-- 上传配置 -->

 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<property name="defaultEncoding" value="UTF-8"></property>

</bean>

 

 

 

 

在controller中定义上传和读取文件的方法

/**

  * SpringMVC 用的是 的MultipartFile来进行文件上传

  * 这里用@RequestParam()来指定上传文件为MultipartFile

  * @throws IOException

  */

@RequestMapping("uploadImage")

@ResponseBody              //这里upfile是config.json中图片提交的表单名称

    public Map<String,String> uploadImage(@RequestParam("upfile")  CommonsMultipartFile upfile,HttpServletRequest request) throws IOException{  

        //文件原名称

String fileName=upfile.getOriginalFilename();

        //为了避免重复简单处理

String nowName=new Date().getTime()+"_" + fileName;

        if(!upimage.isEmpty()){ 

         //上传位置路径

         String path0 = "D:\\eclipseworkspace\\maven-web\\src\\main\\webapp\\upload\\"+nowName;

         //按照路径新建文件

         File newFile = new File(path0);

         //复制

     FileCopyUtils.copy(upimage.getBytes(), newFile);

        }

        //返回结果信息(UEditor需要)

         Map<String,String> map = new HashMap<String,String >();

         //是否上传成功

         map.put("state", "SUCCESS");

         //现在文件名称

         map.put("title", nowName);

         //文件原名称 

         map.put("original", fileName);

         //文件类型 .+后缀名

         map.put("type", fileName.substring(upfile.getOriginalFilename().lastIndexOf(".")));

         //文件路径

         map.put("url", "/"+nowName+"/getImage.do");

         //文件大小(字节数)

         map.put("size", upfile.getSize()+"");

        

        return map;

}     

 

 

 

/**

 * 读取文件

 */

@RequestMapping("{imgName}/getImage")

    public void readImg(@PathVariable("imgName") String imgName,  HttpServletResponse response)  

            throws Exception {  

//设置文件的返回类型

        response.setContentType("image/*");

        //文件路径(windows下是\\,linux下是//,都必须是绝对路径)

        String imgPath="D:\\eclipseworkspace\\maven-web\\src\\main\\webapp\\upload\\"+imgName;

        //java中用File类来表示一个文件

        File image = new File(imgPath);

        //测试这个文件路径是否存在(也就是这个文件是否存在)

        if (!image.exists()) {  

            return;  

        }  

        //FileUtils.readFileToByteArray(File file)把一个文件转换成字节数组返回

        response.getOutputStream().write(FileUtils.readFileToByteArray(image));  

        //java在使用流时,都会有一个缓冲区,按一种它认为比较高效的方法来发数据:

        //把要发的数据先放到缓冲区,缓冲区放满以后再一次性发过去,而不是分开一次一次地发.

        //而flush()表示强制将缓冲区中的数据发送出去,不必等到缓冲区满.

        response.getOutputStream().flush();  

        response.getOutputStream().close();  

    }