这个错误其实是自己代码的错误,相当愚蠢。如果不是巧合,这个bug可能会让我永远没法发现
我本来是做了一个项目,本地发布地址是xxxxxxxxx/zs。给客户发布的地址是xxxxxxxxx/zsyz。就这么个小问题,害我加了两条班,不过都是自己的错,活该。原因是这样的,
======大神的话=======================
Struts2的Filter会过滤到上传文件的request,封装为Struts2自己的MultiPartRequestWrapper,这个时候再到UEditor里的Uploader中用commons-fileupload组件解析request,就无法获取到正确的文件流,所以上传失败。
========不是我说的======================
因为这个原因,人家UEditor已经给出了解决方案,就是写一个自己的过滤器。例如:
import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter; public class MyStrutsFilter extends StrutsPrepareAndExecuteFilter { public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; //不过滤的url String url = request.getRequestURI(); if ("/zs/ueditor/jsp/imageUp.jsp".equals(url)) { chain.doFilter(req, res); }else{ super.doFilter(req, res, chain); } } }
这样,就不让strut2过滤imageUp.jsp的请求。完美。可是注意这里项目名字是写死的。【zs】这里。所以当我换了发布地址的时候,问题就来了。/zsyz/ueditor/jsp/imageUp.jsp这个请求将继续被拦截。需要改这里的名字。谨记。希望跟我犯了一样低级错误的童鞋可以引以为戒。