jfinal+ueditor上传图片、文件报“未找到上传数据错误”的解决方案

创建一个Ueditor的控制器UeditorController,代码如下:

public class UeditorController extends BaseController {

   private static Logger log = Logger.getLogger(UeditorController.class);
   
   public void index() {
      String webRoot = PathKit.getWebRootPath();
      String seprator = File.separator;
      String htmlText = new ActionEnter( getRequest(),  webRoot+ seprator ).exec();
      renderHtml(htmlText);
   }
   
}

配置该控制器的路由:

add("/b/ueditor", UeditorController.class);

修改ueditor.config.js文件中的配置:

//var URL = window.UEDITOR_HOME_URL || getUEBasePath();
var URL = cxt + "/jsFile/ueditor/";

注:这里的URL是ueditor存放在工程中的根目录

将config.json文件拷贝到webapp目录下的b文件夹下,如果没有,则创建。这一步为什么必须是这样的?这个跟你的ueditor路由配置有关,一开始我以为放在类路径下就可以找到该文件,自动加载,后来发现程序并未加载到该文件,看了源代码才发现它是根据请求的路径来加载的,所以,config.json文件存放的位置和ueditor的路由配置有关,比如:路由是 /b/ueditor,那么config.json文件就应该放在webapp(不一定,反正就是那几个:webapp、webcontent等等名字)下的b文件夹。


接着修改config.json配置,由于我的jfinal过滤器拦截所有的请求,也即/*配置,所以config.json中的xxxActionName我没去动,比如:

"imageActionName": "uploadimage",

接着,使用的时候,上传一张图片,出现“未找到上传数据”的错误,由于该错误信息是被编码了,所以没法在工程中搜到,后来找到Ueditor包下的Uploader类,跟到了BinaryUploader这个类的save方法,里面有段代码(41-46行):

(FileItemIterator e = upload.getItemIterator(request)e.hasNext()fileStream = ) {
    fileStream = e.next()(!fileStream.isFormField()) {
        }
}

我发现这个e对象总是为空,百度了一大堆,结果都不靠谱,研究了半天,想起有可能是Ueditor控制器被拦截器处理过了的原因,接着我就在UeditorController这个类上加了去除拦截器的代码:

@Clear
UeditorController BaseController {

,重启,发现正常了。终于解决了这个蛋疼的问题。

描述可能不太清楚,但还是希望可以帮到一些人,如有疑问,请与我联系。

你可能感兴趣的:(jfinal+ueditor上传图片、文件报“未找到上传数据错误”的解决方案)