在实践中如果贸然尝试使用Controller会导致上传文件失败,原因是因为Spring Boot的Request不能强转成为MultipartRequest,只能通过注解请求数据的键作为参数才能获得上传的文件。这里给一个最佳实践,可以不必大幅度修改Spring Boot的配置和UEditor源码,即可快速整合UEditor。
1、第一步,下载UEditor完整源码包,解压缩,把com.baidu.ueditor整个包的源码导入到工程中。
2、第二步,把UEditor的前端静态文件都放在网站的ueditor路径下。
3、第三步,在JSP源码路径中找到config.json,也复制到网站的ueditor路径下。
4、第四步,在项目中写如下的Sevlet类,它可以直接绕过Spring Boot的控制
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.baidu.ueditor.ActionEnter;
@WebServlet(name = "UEditorServlet", urlPatterns = "/UEditor")
public class UEditorController extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding( "utf-8" );
response.setHeader("Content-Type" , "text/html");
PrintWriter out = response.getWriter();
ServletContext application=this.getServletContext();
String rootPath = application.getRealPath( "/" );
String action = request.getParameter("action");
String result = new ActionEnter( request, rootPath ).exec();
if( action!=null &&
(action.equals("listfile") || action.equals("listimage") ) ){
rootPath = rootPath.replace("\\", "/");
result = result.replaceAll(rootPath, "/");
}
out.write( result );
}
}
将configFileName的值修改为"ueditor\\config.json"
6、第六步,修改网站路径下的ueditor/ueditor.config.js脚本
找到 , serverUrl: URL +
在后面的值中做修改,改为../UEditor,用来实现前端自动去访问接口的操作。
7、第七步,写一个Controller,打开一个页面,页面的HTML这样写:
其他说明:用Chrome浏览器时点击上传图片会有几秒钟的延时,原因不详,有待官方解决。
【关于有Tomcat运行时环境和Jetty运行时环境的区别设定】
感谢windlee09网友所提供的信息,经过实践观察,如果Spring Boot的运行方式是直接从main方法运行,那么需要在SpringBoot的Application类上加上@ServletComponentScan注解。如果采用的是maven clean package tomcat7:run,则无需添加该注解,Tomcat会负责搜索注解类。