UEditor源碼自帶文件上傳和圖片上傳的jsp文件,位於jsp文件夾內,分別爲fileUp.jsp和imageUp.jsp,如果你單獨將UEditor集成到JavaWeb項目內,而不集成Struts2框架,理論上講是不會有太大問題,但如果你的JavaWeb項目集成了S2SH,那你使用UEditor上傳任何文件都會只有一個結果——失敗。
因爲Struts2框架使用/*過濾所有路徑,該框架默認使用Apache的Commons FileUpload組件和自帶的FileUploadInterceptor攔截器實現文件上傳,將request中的文件域封裝到action中的File類型的屬性中,並刪除request原有文件域,所以上傳文件失敗。以下是解決方案:
1.自定義action實現文件上傳
2自定義過濾器,指定不對UEditor所在目錄進行過濾,簡而言之,即繞過Struts2框架的過濾器,代碼如下:
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 UeditorFilter extends StrutsPrepareAndExecuteFilter {
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) req;
String url = request.getRequestURI();
if(url.contains("ueditor/jsp")){
chain.doFilter(req, res);
}else{
super.doFilter(req, res, chain);
}
}
}
將web.xml內的Struts2過濾器配置改爲如下所示:即將默認過濾器改爲自定義過濾器
<filter>
<filter-name>struts2</filter-name>
<filter-class>自定義過濾器完全限定名</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
至此結束。