commons-io在struts框架中无法获取upload.parseRequest(request )上传的文件的主要原因是因为struts将request 进行了封装,在文件上传时struts会将HttpServletRequest请求被转成了 MultiPartRequestWrapper,所以如需使用request ,则需要将struts封装好的的 MultiPartRequestWrapper转换成 HttpServletRequest,这里需要实行两部操作: 操作一 :创建java类,继承JakartaMultiPartRequest,代码如下: public class RequestParseWrapper extends JakartaMultiPartRequest {
public void parse(HttpServletRequest servletRequest, String saveDir)throws IOException{
}
}
操作二: 在struts配置文件里添加上,代码如下: <!-- 出来文件上传时servletFileUpload.parseRequest(request )取不到值的问题 -->
<bean type= "org.apache.struts2.dispatcher.multipart .MultiPartRequest"
name= "myRequestParser" class= "com.turui.util.RequestParseWrapper"
scope= "default" optional= "true " />
<constant name= "struts.multipart .handler" value= "myRequestParser" />
这里的class是指操作一创建的java类
1、如果struts2是
status2.3.4
在配置文件struts.xml里加上
1
2
3
4
<
strong
><
bean
type
=
"org.apache.struts2.dispatcher.multipart.MultiPartRequest"
name
=
"myRequestParser"
class
=
"com.icf.common.base.actions.RequestParseWrapper"
scope
=
"default"
optional
=
"true "
/>
<
constant
name
=
"struts.multipart.handler"
value
=
"myRequestParser"
/></
strong
>
1
2
3
<span></span>
public
class
RequestParseWrapper
extends
JakartaMultiPartRequest {
public
void
parse(HttpServletRequest servletRequest, String saveDir)
throws
IOException{ }
}<span></span>
2、如果struts2是
struts2.3.15.1 以后的版本
在struts2.3.15.1后的配置里,struts2的struts-default.xml 里把 struts.multipart.handler 改成了 struts.multipart.parser
在struts配置文件中加上
1
2
3
4
<
bean
type
=
"org.apache.struts2.dispatcher.multipart.MultiPartRequest"
name
=
"myRequestParser"
class
=
"com.icf.common.base.actions.RequestParseWrapper"
scope
=
"default"
optional
=
"true "
/>
<
constant
name
=
" struts.multipart.parser"
value
=
"myRequestParser"
/>
创建一个自己的类RequestParseWrapper
1
2
3
4
public
class
RequestParseWrapper
extends
JakartaMultiPartRequest {
p<span></span>ublic
void
parse(HttpServletRequest servletRequest, String saveDir)
throws
IOException{
}
}
分析原因
struts2的源代码对request对象进行了封装,导致fileList = upload.parseRequest(request);获取不到上传的对象