如何从RequestContextHolder获取MultipartHttpServletRequest?

时间:2011-07-08 18:06:10

标签: java spring-mvc multipartform-data

我已将访问决策管理器配置为在servlet处理之前检查请求,关键行是: -

HttpServletRequest request = (HttpServletRequest) RequestContextHolder.currentRequestAttributes().getRequest(); 

一切都好。但是,当请求为enctype="multipart/form-data"时,如果MultipartHttpServletRequest仅返回RequestContextHolder.currentRequestAttributes().getRequest(),我如何获取HttpServletRequest

我正在使用spring 2.5。

5 个答案:

答案 0 :(得分:2)

MultipartHttpServletRequest是用于处理多部分表单提交的特定于Spring的接口。默认实现是DefaultMultipartHttpServletRequest,其构造函数采用HttpServletRequest

所以:

HttpServletRequest originalRequest = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
MultipartHttpServletRequest multiPartRequest = new DefaultMultipartHttpServletRequest(originalRequest);

答案 1 :(得分:2)

除了

<form method=<method> action=<url> enctype="multipart/form-data"></form>

你必须

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

在弹簧配置文件中。

这是同一个

的精彩教程

http://techdive.in/spring/spring-file-upload

答案 2 :(得分:0)

您是否尝试过投射到MultipartHttpServletRequest

答案 3 :(得分:0)

如果您使用的是spring-mvc,请确保放入此行

<bean id="multipartResolver"
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
在你的app-config.xml中

这对我有用。

答案 4 :(得分:0)

我认为你不能从RequestContextHolder获取DefaultMultipartHttpServletRequest。 DefaultMultipartHttpServletRequest实际上实现了HttpServletRequest。 但是,如果您使用CommonsMultipartResolver,则有2个请求实例。一个是DefaultMultipartHttpServletRequest实例,另一个是HttpServletRequest实例。 实际上我不知道如何从RequestContextHolder获取第一个实例。你可以从中获得第二个实例。