UEditor-分布式部署解决方案

来源:互联网 发布:苹果平板电脑淘宝下载 编辑:程序博客网 时间:2024/04/28 10:18

        UEditor是一款很强大的编辑器,但是在使用中又会遇到一些问题。比如常见的因为后台配置原因提示无法上传图片或者附件之类的。下面就把使用过程中遇到的问题和解决方法给各位友友分享一下:

 1、下载依赖包

下载地址:http://ueditor.baidu.com/website/download.html

注:如果你想实现自定义文件上传,建议下载源码包。

2、使用方法就不赘述了,自己可以看官方的文档

官方文档地址:http://fex.baidu.com/ueditor/

3、在使用中遇到的问题

3.1 后台配置问题,无法上传文件

问题一:下载的包中jsp文件夹下面的config.json这个文件不能用记事本打开来编辑,否则就会出现JSON格式化异常。

可以用源码自己打断点试试。大坑,如果你不想跳的话,就老老实实地别用记事本了。

问题二:官方给的说明文档是直接部署在tomcat下一个项目,但是这样显然不符合我们的实际情况。如果你的项目是分布式部署的,那么对不起,你在不修改源码的情况下,貌似无法实现图片资源的多实例共享。此时,悲剧的事情就发生了,你懂的。

官网的配置文件config.json在获取文件目录时都是捕获的项目路径,但是分布式部署的时候,我们文件显然不是存放在单个示例的某个文件夹下面的。此时我们就需要对文件上传部分的路径进行一下修改,这也是前面建议大家下载源码的原因。

那么修改哪些部分呢,下面直接上源码:

1、文件上传分发器

package com.baidu.ueditor.upload;public class Uploader {private HttpServletRequest request = null;private Map<String, Object> conf = null;public Uploader(HttpServletRequest request, Map<String, Object> conf) {this.request = request;this.conf = conf;}    //官网文件上传的执行方法public final State doExec() {String filedName = (String) this.conf.get("fieldName");State state = null;        //处理不同的文件上传请求if ("true".equals(this.conf.get("isBase64"))) {state = Base64Uploader.save(this.request.getParameter(filedName),this.conf);} else {state = BinaryUploader.save(this.request, this.conf);}return state;}}

2、Base64Uploader.java

public static State save(String content, Map<String, Object> conf) {byte[] data = decode(content);long maxSize = ((Long) conf.get("maxSize")).longValue();if (!validSize(data, maxSize)) {return new BaseState(false, AppInfo.MAX_SIZE);}String suffix = FileType.getSuffix("JPG");    //这里的保存路径就是你在config.json中的imagePathFormat路径的值String savePath = PathFormat.parse((String) conf.get("savePath"),(String) conf.get("filename"));savePath = savePath + suffix;//官方的文件物理路径,这也就是无法实现分部署部署的关键    //String physicalPath = (String) conf.get("rootPath") + savePath;//此处修改为自己的文件上传路径便于分布式部署String physicalPath =Global.getProperties("sys.commons.FILE_UPLOAD_PATH") + savePath;State storageState = StorageManager.saveBinaryFile(data, physicalPath);if (storageState.isSuccess()) {storageState.putInfo("url", PathFormat.format(savePath));storageState.putInfo("type", suffix);storageState.putInfo("original", "");}return storageState;}

3、BinaryUploader.java中的方法按照自己的修改一下即可。

4、如果你的文件上传物理路径不是写在配置文件中,那么在config.json中新加一个物理路径参数,直接用conf取出来即可。即:

String physicalPath =(String) conf.get("yourphysicalPath") + savePath;

5、本处大家修改成自己的实现以后,在浏览本地图片资源的地方也记得修改,不然无法查看你已经上传的资源。

修改下面类中的方法即可,在此就不做累赘了。

FileManager.getPath( File file )

6.如果大家用的是源码,并且是和其他框架一起使用的话,那官方提供的依赖包就不需要重新导入了。



0 0
原创粉丝点击