springboot + ueditor使用时,要对接上传功能(上传功能包括:图片上传,图片列表上传,视频上传,涂鸦上传....).那么,我们就需要知道ueditor是怎么进行上传的。
我以前也用过这个,不需要很麻烦就能解决这个问题。但是,我以前用的不是springboot 项目。就是一个普通的web项目。使用自带的controller.jsp 进行图片保存。但是,现在,我想自定义保存路径。用的也是springboot。
当加载UE的时,会进行访问上传配置文件的请求。访问失败。出现如下两种错误提示:
- {state: "配置文件初始化失败"}
- {"state": "\u914d\u7f6e\u6587\u4ef6\u521d\u59cb\u5316\u5931\u8d25"}
其实这两种错误提示是一种,下边的是unicode编码。转换为中文就是上边的信息。
那么,怎么解决?
配置文件出现错误了,那就排查哪里出现错误了。既然是上传的配置文件的访问出现了问题,那就去找这个访问接口。
@RequestMapping("config")
public void config( HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("application/json");
String rootPath = request.getSession().getServletContext().getRealPath("/");
System.out.println("rootPath:"+ rootPath);
try {
String exec = new ActionEnter(request, rootPath).exec();
PrintWriter writer = response.getWriter();
writer.write(exec);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
首先讲解一下上述是做什么的(代码是错误的,也就是controller.jsp中的操作)。我是边解决问题,边记录想法(这个问题有点大)。
上边用到了rootPath与 创建了一个ActionEnter对象,并把这个对象的exec方法的值进行了返回。
new ActionEnter(request,rootPath):创建一个ActionEnter对象,这个对象中还有其他的操作。查看源码不难发现。
exec方法:是返回操作的结果描述。
我们了解了一个大概。还有一条发现,我们打开带编辑器的页面的时候会进行一次访问接口,点击图片上传功能的时候又会再此访问同一接口。(在第一次访问处理的时候,我直接硬生生的把配置文件中的json读取出来扔回去了。并没有其他的操作。配置文件初始化失败这个错误没有了。但是,也没有了上传功能)。
我调试了一下发现最后的问题出现的是:
String configContent = this.readFile(this.getConfigPath());
系统找不到指定的路径。好吧,那就是他生成的路径有问题。那么,我们回过头来看他怎么生成路径的。
经过调试发现,rootPath的值缺少路径:"/WEB-INF/classes/static"。完整的如下:
@RequestMapping("jsp/config")
public void config( HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("application/json");
String rootPath = request.getSession().getServletContext().getRealPath("/") + "/WEB-INF/classes/static";
System.out.println("rootPath:"+ rootPath);
try {
String exec = new ActionEnter(request, rootPath).exec();
PrintWriter writer = response.getWriter();
writer.write(exec);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
不详细的解释源码了。如果你找别人的解决方式并不能解决您的问题。那么,尝试一下看看百度的源码。