其实在之前的两个项目就已经使用过Ueditor了 自认为坑都碰过一遍了
这回换了SpringBoot+Freemaker的项目后又发现了很多问题
下面就能详细说说吧
ueditor是提供了jar包的形式引入到项目中的
但我这边是直接把ueditor java后台的源码直接引入到项目了 这样方便后期的改动
事实证明,需要改动的地方确实很多
ueditor在加载时需要调用ueditor.config.js中配置的serverUrl的地址来确定后台配置是否可用
首先把ueditor文件夹 直接放到 static下
java这边后台配置项默认是jsp格式的 文件位置在 /ueditor/jsp/controller.jsp
第一个问题就是ueditor在请求这个文件就出问题了 会报后台配置项没有正常加载
这是因为项目使用的是freemarker没有jsp相关环境 访问这个地址时直接把这个问题视作普通文本文件了
这边我的处理方案是 将 controller.jsp重命名为 controller2.jsp
在后台controller中新建 BaiduUeditorController 创建一个访问地址为 /ueditor/jsp/controller.jsp的请求
在请求的方法中 实现 原本controller.jsp的逻辑
代码如下:
import com.baidu.ueditor.ActionEnter; import com.chinahrt.examyun.web.config.ConfigConst; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; @Controller @RequestMapping("/ueditor") public class BaiduUeditorController { @RequestMapping("/jsp/controller.jsp") public void writeData(HttpServletRequest request, HttpServletResponse response) throws IOException { request.setCharacterEncoding( "utf-8" ); response.setHeader("Content-Type" , "text/html"); String rootPath = "/static/"; String saveRootPath= ConfigConst.UPLOADDIR+"examyun"+ File.separator; response.getWriter().write(new ActionEnter( request, rootPath,saveRootPath ).exec()); } }这样就解决了 加载配置项时加载出错的问题
然后在前台尝试去上传,没有出乎意料,又报错了,报错在ueditor.all.js的24557行
可以看到是“imageActionName”这个配置项没有加载,查找后发现该配置在config.json中,应该是config.json加载出问题了。
再查找百度的源代码 发现config.json的加载竟然是在后台由java代码来加载的。。。
配置config.json地址的是ConfigManager.java
然后断点到ConfigManager类的readFile方法 发现调用时参数的path有问题
因为是用的springboot所有不能再用传统的web容器的filePath来读取文件地址
原因及解决方案可以参考:http://blog.csdn.net/kinginblue/article/details/71699627
于是我直接在这个方法里写死了config.json文件的地址(不推荐)
最终代码更改如下:
InputStreamReader reader = new InputStreamReader( getClass().getClassLoader().getResourceAsStream("static/ueditor/jsp/config.json"), "UTF-8" ); BufferedReader bfReader = new BufferedReader( reader );再次重试后js的问题没有了 config.json读取正常了 ok!继续下一步
再次尝试上传图片
好吧 又报错了 这回是提示 未找到上传数据
百度到这篇文章 :https://www.cnblogs.com/vincent4code/p/5809858.html
替换了 BinaryUpload中相关代码后解决!
再尝试上传 成功!