您的位置:首页 > 运维架构 > Tomcat

解决ueditor上传文件到tomcat虚拟路径等问题

2016-11-02 22:19 555 查看
ueditor是百度出品的一款强大的富文本web编辑器,有需要的朋友可以到http://ueditor.baidu.com/去看看。

其包含有图片,文件等上传功能,在使用文件上传功能的时候首先要进行相关的配置,包括前端后端的配置,具体的可以查看官方文档,这里我就不介绍了。我主要想说的是,ueditor的文件上传路径默认是到项目发布根目录,而很多时候,我们是非常需要将文件上传到指定的磁盘目录的,而且放到项目根目录是非常不好的,因为当我们在tomcat重新发布项目的时候,之前上传的文件很可能就会不见了。

在网上搜索了一些关于这方面的解决方案,主要有两种吧,一种是修改ueditor的java源代码;另一种是上传功能不使用ueditor,用另外的上传方式。个人对这两种方式都不是很满意,首先修改源代码可操作性不强,对于版本更新也不好,使用另外的上传方式对于与ueditor其他功能的整合使用感觉会比较蓝瘦,比如获取已上传的图片或者文件这些功能可能还需要自己写相关的代码,不可忍受。

还是想通过修改相关的配置来解决这个问题。不断翻阅ueditor配置文档和不断尝试后,终于解决了这个问题。

首先要知道,ueditor的前端配置是在ueditor.config.js进行的,里面有个serverUrl,它是ueditor前端与后端交互的统一请求接口路径,就是说如果你不自定义其他请求地址的话,前端到后端就必定要走这条路。



这个请求路径可以修改,上面一个是demo默认的路径,下面是我自己修改的。后端的接口代码如下:

/**
* ueditor插件后端配置,请注意一下几点:
* 1.ueditor的config.json配置文件需要放在rootPath/ueditor文件夹下,不然读取不了配置,
* config.json放置在外部文件夹下,是为了把上传的文件也放到外部文件夹,以虚拟路径来访问,上传到项目文件夹下,再次发布后文件可能丢失
* (此处的ueditor是对应请求url中的ueditor的
* ,如果是/ueditor/sth/UEController则需要放在rootPath/ueditor/sth文件夹下。)
* 2.config.json配置中不需要配置文件虚拟路径,已用waitReplaceUrl占位,在此处统一进行字符替换
*/
@ResponseBody
@RequestMapping("/ueditor/UEController")
public String UEController(HttpServletRequest request, HttpServletResponse response) {
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
}
response.setHeader("Content-Type", "text/html");
String rootPath = PropertiesUtils.getVal("config.properties", "attachmentLocation");
String rootUrl = PropertiesUtils.getVal("config.properties", "attachmentUrl");
// String rootPath = request.getServletContext().getRealPath("/");
String result = new ActionEnter(request, rootPath).exec();
String action = request.getParameter("action");

// ueditor本省的bug,获取在线文件时去除绝对路径
if (action != null && (action.equals("listimage") || action.equals("listfile"))) {
result = result.replaceAll(rootPath, "");
}

// 替换config.json中的文件访问路径前缀,避免要到json中写死
result = result.replaceAll("waitReplaceUrl", rootUrl);
return result;
}


这里的路径写法有一定的要求,因为后台去找config.json配置文件的时候,它是去rootPath+请求的url前一截的文件夹去找的,就是像这里的话,我的rootPath是D:/fzjcFileLocal/,请求的url是/ueditor/UEController,那么config.json就要放到D:/fzjcFileLocal/ueditor这个路径下,否则会因为找不到配置文件而提示说“配置文件初始化失败”,请求成功返回的应该是config.json的配置内容。

这时候我们还需要做的是在config.json中配置图片、文件的访问路径前缀,如imageUrlPrefix、scrawlUrlPrefixfileUrlPrefix等....fix,这里可以直接写成tomcat配置的文件虚拟目录。但是为了修改方面,我选择用一个特定的字符串waitReplaceUrl来代替,然后在后端进行替换(代码如上),这样就不用到config.json修改了,只需要在功能的配置文件修改移除就好了。到这里就可以上传到指定的虚拟目录了。

但是发现其返回的图片路径是有问题的,在线管理的图片访问不了,检查发现是其返回的相对路径有问题,他返回的不是相对路径而是绝对路径,网上说这是ueditor的一个bug,但是我们可以做一个巧妙的处理,在后端对路径进行一些替换,将根目录replace掉就可以了。



至此这个问题算是较为令人满意了,唯一的不足就是config.json需要放到虚拟目录的指定文件夹,而不能放到发布的工程里,另外还有个问题就是本人用的springmvc框架,如果有配置springmvc的上传配置的话,ueditor上传文件会提示找不到文件,原因是有springmvc上传配置会对请求request做一些处理,导致不能解析,这里因为我没有用到springmvc的上传所以将上传配置去掉就好了。如果其他朋友有更好的解决方案,欢迎交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐