如题,使用kindeditor插件上传文件,
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
//上传文件
if (!item.isFormField()) {
......
......
try{
File uploadedFile = new File(savePath,tempName);
item.write(uploadedFile);
}catch(Exception e){
errorMsg = "上传文件失败。";
}
}
}
调用upload.parseRequest(request)来处理时,返回了空的items
导致原因是struts2把原始的原来S2为简化上传功能,把所有的enctype="multipart/form-data"表单做了wrapper最后把HttpServletResquest封装成 org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper
解决方法1:
web.xml修改
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
将/*修改为/*.action
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*.action</url-pattern>
</filter-mapping>
方法2:
在struts2配置文件中增加
<constant name="struts.action.excludePattern" value="/kindeditor/jsp/upload_json.jsp"></constant>
方法3:
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest"
name="myRequestParser" class="com.MyRequestParser"
scope="default" optional="true" />
<constant name="struts.multipart.handler" value="myRequestParser" />
package com;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest;
public class MyRequestParser extends JakartaMultiPartRequest {
public void parse(HttpServletRequest servletRequest, String saveDir) throws IOException {
}
}
虽然这个类什么也没有,但是必须得有。
这样就可以解决 List items = upload.parseRequest(request);它为空的问题了。