S2SH集成UEditor無法上傳文件解決方案

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>

至此結束。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章