1. 程式人生 > >java配置ueditor中解決“未找到上傳檔案”錯誤提示

java配置ueditor中解決“未找到上傳檔案”錯誤提示

ueditor是一個功能十分強大的線上文字編輯器,但是在ssh框架中,確切的說實在struts2中由於其攔截器需要對request,session物件進行重新封裝,這個過程中會把request物件中儲存的一些內容清空,所以會導致ueditor的上傳功能獲取不到需要上傳的內容導致“未找到上傳檔案”的錯誤! 參考網上資料和自己實驗,最終的解決思路是,重寫struts2中的一個轉換的類,然後配置struts2使用我們重寫的這個類。由於我們的工程中可能會有其他的上傳等功能,為了不影響其他功能的時候,還需要再新增一個過濾器,這個過濾器的作用是:只針對ueditor的上傳功能。 具體在java中使用ueditor需要修改和配置的地方,百度上很相關方面的資料,這裡就不說明了,這裡只說明解決“未找到上傳檔案”錯誤的方法。 具體的解決方法如下: 注意:文章的xml內容中尖括號和英文之間有空格,複製到配置檔案中的時候要刪掉空格,這裡有空格的話新浪會把標籤過濾掉,所以這裡就加上了空格,這裡要注意!!!
第一步:重寫struts2的轉換器,重寫類的內容如下: import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest; public class RequestParseWrapper extends JakartaMultiPartRequest { public void parse(HttpServletRequest servletRequest, String saveDir)throws IOException      {    }   } 這裡的方法是一個空方法,但是必須要有
第二步:配置struts.xml,作用是讓struts2使用我們的這個轉換器,配置方法是在struts.xml中新增以下配置 < bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="myRequestParser" class="com.lsra.tools.uedior.RequestParseWrapper" scope="default" optional="true" /> < constant name="struts.multipart.handler" value="myRequestParser" /> bean標籤中的name是自定義的,class的值是我們重寫的轉換器所在的位置
constant標籤中的value要和bean中的name保持一致,其他的不需要修改 第三步:建立一個過濾器,用來過濾ueditor的上傳請求,過濾器程式碼如下: import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.dispatcher.StrutsRequestWrapper; public class UeditorFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; String url = request.getRequestURI(); if (decideURI(url)) { chain.doFilter(new StrutsRequestWrapper((HttpServletRequest) req), res); }else{ chain.doFilter(req, res); } } private boolean decideURI(String url){ if(url.endsWith("imageUp.jsp")){ return true; }else if(url.endsWith("fileUp.jsp")){ return true; } return false; } } 這裡的decideURI方法中只過濾了這兩個ueditor的jsp頁面,如果你的工程中還有其他和這兩個jsp重名的頁面,最好這裡改成ueditor中這兩個頁面的全路徑。 第四步:在工程web.xml中配置這個過濾器,這個過濾器要放在struts2攔截器的前面,如下: < filter> < filter-name>ueditorFilter< /filter-name> < filter-class> com.lsra.tools.uedior.UeditorFilter < / filter-class> < / filter> < filter-mapping> < filter-name>ueditorFilter< /filter-name> < url-pattern>*.jsp< /url-pattern> < /filter-mapping> filter-mapping標籤一定要配置到struts2攔截器的前面