1
回答
springMVC过滤器过滤文件上传,获取参数为空
滴滴云服务器,限时包月0.9元,为开发者而生>>>   

使用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的值?是不是过滤器拦截到请求时表单还没有提交完毕,获取不了表单里面的值?求解决方案。

举报
serenity
发帖于5年前 1回/2K+阅
共有1个答案 最后回答: 5年前

http://www.oschina.net/code/explore/cos/multipart/MultipartParser.java

参考一下,cos的解析。form-data的方式需要自己分析请求包

--- 共有 1 条评论 ---
serenityform属性enctype="multipart/form-data"时,参数是以流的形式传递给服务端的,filter在spring还没有解释请求时就拦截了。在这获取参数的话要自己根据分隔符解释流。我改用spring的拦截器实现转发请求了。 5年前 回复
顶部