springMvc 完美解决 multipart/form-data 方式提交请求 在 Filter 中 ServletRequest.getParameter方法 获取不到参数的问题
来源:互联网 发布:xp保存网络密码 编辑:程序博客网 时间:2024/06/05 10:43
springMvc 完美解决 multipart/form-data 方式提交请求 在 Filter 中 ServletRequest.getParameter方法 获取不到参数的问题
版权声明:本文为博主原创文章,未经博主允许不得转载。
本文 只讲使用不过多阐述原理(因为我也没太深究),希望有熟知原理的朋友不吝分享 下面开始。
------------------------------------------------------------------------------ 无聊的前言 但是还是得说 ------------------------------------------------------------------------------------------------------------------------
前端时间处理上传文件时遇到了一些问题 multipart/form-data 方式提交的请求 在无法用Filter 中用 ServletRequest.getParameter 方法取不到一并提交上来的 参数,网上说 需要使用 ServletRequest.getReader() 方法 来获取请求信息(RequestPayload), 然后在解析字符串来获取想要的参数。 但是! ServletRequest.getReader() 只能获取一次,如果在拦截其中 取出了requestPayload ,那么在spring的 controller 中 你将取不到参数和文件了!!!!!
摸索到了这里我发现这是走了弯路, 既然 springMVC 的接口中可以获取到 参数,那说明 spring 已经很好的解决了这个问题 咱们就不要自己造轮子了;
!!!!!!!!!!干货来了
通过查看mvc的源码 果然 发现了两个类,
1.1.实现了、 ServletRequest的 org.springframework.web.multipart.MultipartHttpServletRequest.Java 类 (这个类的 getParameter 方法可以获取到 multipart/form-data 和 非multipart/form-data 方法上传的 参数)
1.2.用于创建 MultipartHttpServletRequest.java 的 org.sprin
gframework.web.multipart.MultipartResolver.java 类
使用方法
2.1 首先在你的spring配置文件中 配置 MultipartHttpServletRequest
- <bean id="multipartResolver"
- class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
- p:defaultEncoding="UTF-8">
- <property name="maxUploadSize">
- <value>104857600</value>
- </property>
- <property name="maxInMemorySize">
- <value>4096</value>
- </property>
- </bean>
2.2 在你的拦截其中 注入 MultipartHttpServletRequest
- // 用于创建MultipartHttpServletRequest
- private MultipartResolver multipartResolver = null;
- @Override
- public void init(FilterConfig arg0) throws ServletException {
- // 注入bean
- multipartResolver = ((MultipartResolver)ApplicationContextUtil.getContext().getBean("multipartResolver", MultipartResolver.class));
- }
2.3 在你的最顶层的 拦截器中 把你的 ServletRequest 替换成 MultipartHttpServletRequest
- /**
- * 获取 request
- * @param req
- * @return
- */
- private ServletRequest getRequest(ServletRequest req){
- String enctype = req.getContentType();
- if (StringUtils.isNotBlank(enctype) && enctype.contains("multipart/form-data"))
- // 返回 MultipartHttpServletRequest 用于获取 multipart/form-data 方式提交的请求中 上传的参数
- return multipartResolver.resolveMultipart((HttpServletRequest) req);
- else
- return req;
- }
2.4 把 用上面 2.3的 getRequest(req) 获取到的 MultipartHttpServletRequest 交给 chain.doFilter(MultipartHttpServletRequest, resp); 让请求继续执行。 之后的所有拦截器和controller都能继续get参数了
2.5 没了
- springMvc 完美解决 multipart/form-data 方式提交请求 在 Filter 中 ServletRequest.getParameter方法 获取不到参数的问题
- springMvc 完美解决 multipart/form-data 方式提交请求 在 Filter 中 ServletRequest.getParameter方法 获取不到参数的问题
- springMvc 完美解决 multipart/form-data 方式提交请求 在 Filter 中 ServletRequest.getParameter方法 获取不到参数的问题
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法 ?
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的问题
- springMVC 过滤器获取bean 和 multipart/form-data请求参数
- 当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到
- FORM的ENCTYPE="multipart/form-data" request.getParameter()获取不到值
- ServletRequest获取不到getParameter和filter获取不到request请求中的Parameter
- 解决multipart/form-data表单中传递参数问题(动态更改表单提交URL)
- enctype="multipart/form-data"中Form参数的获取
- multipart/form-data表单提交后,使用request.getParameter来获得text的参数值
- FORM的ENCTYPE="multipart/form-data" 时request.getParameter()值为null问题的解决
- 普通的listview适配器
- servlet
- HDU-1165-Eddy's research II(递推 打表 找规律)
- 3翻就减原则
- SlidingMenu源码分析及拓展:监听拉出菜单时的滚动事件,将主页变暗
- springMvc 完美解决 multipart/form-data 方式提交请求 在 Filter 中 ServletRequest.getParameter方法 获取不到参数的问题
- 有声书-恶魔的奶爸节选
- Ubuntu 16.04 kinetic上移植安装嵌入式版本cartographer
- python 3 网络爬取图片之二
- C# 中计算第几周的几种方法
- 使用 Python 实现鼠标键盘自动化
- spring源代码解析收藏
- delphi Controls Components 属性
- python 递归比较两个dict或json(相等,包含)