开发者社区> 问答> 正文

springMVC过滤器过滤文件上传,获取参数为空 400 请求报错 

使用springMVC,图片上传,过滤器拦截获取不了请求参数。
页面发起的请求有三个参数:op,name,picture。
HTML代码如下:

<form action="<%=request.getContextPath()%>/app"  method="post" enctype="multipart/form-data"> op:<input name="op" value="user.regist" /><br/> 姓名(name):<input name="name" /><br/> 头像(picture):<input name="picture" type="file"><br/> <input type="submit"/> </form>
过滤器的实现的功能是获取op参数进行请求转发。 过滤器代码如下:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest)request; String op = httpRequest.getParameter("op"); op = op.replace(".", "/"); request.getRequestDispatcher("/app/"+op).forward(request, response); }
遇到的问题是表单的属性是enctype="multipart/form-data"时,过滤器取得的op值是null。 请教过滤器如何在表单属性enctype="multipart/form-data"时获取到op的值?是不是 过滤器拦截到请求时表单还没有提交完毕,获取不了表单里面的值?求解决方案。

展开
收起
kun坤 2020-05-30 14:23:19 841 0
1 条回答
写回答
取消 提交回答
  • http://www.oschina.net/code/explore/cos/multipart/MultipartParser.java
    参考一下,cos的解析。form-data的方式需要自己分析请求包 ######form属性enctype="multipart/form-data"时,参数是以流的形式传递给服务端的,filter在spring还没有解释请求时就拦截了。在这获取参数的话要自己根据分隔符解释流。我改用spring的拦截器实现转发请求了。

    2020-05-30 14:23:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载