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