springmvc接收文件类型数据_晏无心_新浪博客

springmvc会在http请求到来时先判断是否是Multipart文件上传,如果是,将request转换为MultipartHttpServletRequest:
springmvc接收文件类型数据

springmvc接收文件类型数据
从这里可以看出,如果this.multipartResolver为空,哪怕http请求是文件上传,springmvc也只是把当作非文件上传请求处理,结果自然是不能成功上传文件。
this.multipartResolver在DispatcherServlet初始化时进行赋值:
springmvc接收文件类型数据

springmvc接收文件类型数据
可以看出,如果不手动配置multipartResolver,默认是为空的。需要在springmvc.xml里进行配置:
springmvc接收文件类型数据

multipartResolver都是实现MultipartResolver接口,和其他参数类型Resolver实现的接口是不一样的:
springmvc接收文件类型数据
来看下springmvc中两个实现了MultipartResolver接口的子类:CommonsMultipartResolver和StandardServletMultipartResolver。

CommonsMultipartResolver:
springmvc接收文件类型数据

springmvc接收文件类型数据

springmvc接收文件类型数据
isMultipart()方法判断http请求是否是文件上传。可以看出必须是“POST”请求,并且contentType的值不能为空,要包含“multipart/”,不然不会当作文件上传处理。
springmvc接收文件类型数据
resolveMultipart()用来解析http请求,将request转换为MultipartHttpServletRequest,分为是否延迟解析两种情况。

StandardServletMultipartResolver:
springmvc接收文件类型数据
StandardServletMultipartResolver的isMultipart()方法和CommonsMultipartResolver的基本一致,都是要“POST”请求并且contentType以“multipart/”开头。
springmvc接收文件类型数据
resolveMultipart()同样有是否延迟解析的处理。

再来看看具体的handler:
springmvc接收文件类型数据
MultipartResolver负责把request转换为MultipartHttpServletRequest,具体的参数解析仍然和之前的参数解析一致,这个handler的file参数会被RequestParamMethodArgumentResolver解析。
springmvc接收文件类型数据
可以看到RequestParamMethodArgumentResolver的supportsParameter()方法里,当参数类型是Multipart的时候,RequestParamMethodArgumentResolver是支持解析的。
springmvc接收文件类型数据
在解析时,当request是MultipartRequest时,从request里获取List列表,将值绑定到handler的参数上。

另外在DispatcherServlet中,请求结束的时候会对MultipartRequest做一个清理处理:
springmvc接收文件类型数据

springmvc接收文件类型数据

springmvc对文件上传的处理大致流程就分析完了。
接下来将会对@RequestPart以及springmvc实现restful风格URL进行分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值