struts2 common-files upload 解析不到文件域

HttpServletRequest request = ServletActionContext.getRequest();
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(419430400);
List<FileItem> items = upload.parseRequest(request);


以上代码是struts2 和 common-files 进行文件上传的功能,但是在最后一步中发现从request中解析的文件(FileItem)列表为空,

但是又能够确保前端的页面中的表单域中确实没有错误,那这是为什么呢?


原因在于,这里的request是被struts2 进行封装的,已经不再是原生的Servlet 请求,所以这个request无法被ServletFileUpload 解析,这就导致了列表为空;

那么解决的方法就是,使用没有被struts2封装过的request,可以在struts.xml中指定文件上传使用的request解析器,如下:

<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest"
  name="myRequestParser" class="com.mypkg.RequestParseWrapper"
  scope="default" optional="true" />
 <constant name="struts.multipart.handler" value="myRequestParser" />


其中com.mypkg.RequestParseWrapper是自己实现的类:

public class RequestParseWrapper extends JakartaMultiPartRequest{     
    //这里对parse方法进行了覆盖,使其无法封装request
    public   void   parse(HttpServletRequest   servletRequest,   String   saveDir)throws   IOException { 

    }     
}
这样就可以解决无法解析文件域的问题了


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值