ueditor富文本上傳圖片的時候報錯"未找上傳數據"


最近因為需求所以在ssh項目中使用了Ueditor富文本插件,但是在上傳圖片的時候總是提示“未找到上傳數據”,之后百度了好久終於弄明白了。因為Ueditor在上傳圖片的時候會訪問controller.jsp,去獲取圖片上傳路徑,但是我之前在項目的web.xml配置了struts攔截器為<url-pattern>/*</url-pattern>,所以這就導致了在上傳圖片時Ueditor被攔截器攔截掉,從而獲取不到圖片上傳路徑,自然也就會報錯了。

現在知道錯誤原因了,接下來就要解決問題,目前想到的解決方法是兩種,一種是修改web.xml攔截器配置,第二種是重寫struts攔截器。下面逐一看一下解決過程

(1)修改web.xml攔截器配置

將原來配置的/*改為*.do和*.action.如下:

 1 <!-- struts2配置start -->
 2   <filter>
 3       <filter-name>struts2</filter-name>
 4       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 5   </filter>
 6   <filter-mapping>
 7       <filter-name>struts2</filter-name>
 8      <!--  <url-pattern>/*</url-pattern> -->
 9       <url-pattern>*.do</url-pattern>
10       <url-pattern>*.action</url-pattern> 
11       <dispatcher>REQUEST</dispatcher>
12       <dispatcher>FORWARD</dispatcher>
13   </filter-mapping>
14   

(2)重寫struts攔截器

    第一步:新建類RequestParseWrapper類,該類繼承了JakartaMultiPartRequest,注意:該類中的parse(HttpServletRequest servletRequest, String saveDir)是一個空方法,但是必須保留

 1 package com.ysysj.lhb.util;
 2 import java.io.IOException;
 3 import javax.servlet.http.HttpServletRequest;
 4 import org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest;
 5 
 6 public class RequestParseWrapper extends JakartaMultiPartRequest {
 7 
 8     @Override
 9     public void parse(HttpServletRequest servletRequest, String saveDir) throws IOException {
10         
11     }
12 }
RequestParseWrapper類

   第二步: 配置struts.xml,讓struts使用我們自定義的攔截器

1     <bean class="com.ysysj.lhb.util.RequestParseWrapper" name="customRequestParser" type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" scope="default" optional="true"/>
2     <constant name="struts.multipart.handler" value="customRequestParser"/>

   注意:<bean>中的name名稱是自定義的,<constant>中的value值必須和<bean>中的name值保持一致。

  第三步: 創建UeditorFilter過濾器,來過濾Ueditor上傳請求

 1 package com.ysysj.lhb.util;
 2 import java.io.IOException;
 3 import javax.servlet.Filter;
 4 import javax.servlet.FilterChain;
 5 import javax.servlet.FilterConfig;
 6 import javax.servlet.ServletException;
 7 import javax.servlet.ServletRequest;
 8 import javax.servlet.ServletResponse;
 9 import javax.servlet.http.HttpServletRequest;
10 import org.apache.struts2.dispatcher.StrutsRequestWrapper;
11 
12 public class UeditorFilter implements Filter {
13 
14     @Override
15     public void destroy() {    
16     }
17 
18     @Override
19     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
20             throws IOException, ServletException {
21         HttpServletRequest httpServletRequest = (HttpServletRequest) request;
22         String URL = httpServletRequest.getRequestURI();
23         if(URL.endsWith("controller.jsp")) {//過濾掉ueditor中的controller.jsp頁面。如果項目中存在同名頁面,這里最好使用controller.jsp的全路徑
24             chain.doFilter(new StrutsRequestWrapper(httpServletRequest), response);
25         }else {
26             chain.doFilter(request, response);
27         }    
28     }
29 
30     @Override
31     public void init(FilterConfig config) throws ServletException {
32     }
33 }
UeditorFilter 過濾器

  第四步:在web.xml中配置我們自定義的過濾器,注意我們自定義的這個過濾器要放在struts2攔截器的前面

1  <filter>
2       <filter-name>ueditorFilter</filter-name>
3       <filter-class>com.ysysj.lhb.util.UeditorFilter</filter-class>   
4   </filter>
5   <filter-mapping>   <!--filter-mapping標簽一定要配置到struts2攔截器的前面-->
6       <filter-name>uedirotFilter</filter-name>
7       <url-pattern>*.jsp</url-pattern>
8   </filter-mapping>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM