java配置ueditor中解決“未找到上傳檔案”錯誤提示
阿新 • • 發佈:2019-01-07
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攔截器的前面