springmvc支持多文件上传

来源:互联网 发布:ifashion淘宝怎么进 编辑:程序博客网 时间:2024/05/21 10:34

这里我就不多讲springmvc是如何配置实现如何上传的了,需要的读者可以查看一下如下博客:

http://exceptioneye.iteye.com/blog/1314958

我主要是分析一下我遇到的一个问题:
报错:
org.springframework.web.multipart.MultipartException: The current request is not a multipart request

在springmvc在请求到达的时候DispatcherServlet这个类来进行处理,
在doDispatch这个中有一个专门检测是否为multipartRequest

processedRequest = checkMultipart(request);multipartRequestParsed = (processedRequest != request);

在进入checkMultipart(HttpServletRequest request)中

protected HttpServletRequest checkMultipart(HttpServletRequest request) throws MultipartException {        if (this.multipartResolver != null && this.multipartResolver.isMultipart(request)) {            if (WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class) != null) {                logger.debug("Request is already a MultipartHttpServletRequest - if not in a forward, " +                        "this typically results from an additional MultipartFilter in web.xml");            }            else if (request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE) instanceof MultipartException) {                logger.debug("Multipart resolution failed for current request before - " +                        "skipping re-resolution for undisturbed error rendering");            }            else {                return this.multipartResolver.resolveMultipart(request);            }        }        // If not returned before: return original request.        return request;    }

方法中会首先检测你是否配置了MultipartResolver,然而debug发现multipartResolver==null,直接就返回了request,就判断了该请求并非
multipartRequest请求,multipartRequestParsed任为false

为什么multipartResolver==null,在dispatcher-servlet.xml里面配置

 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">        <property name="maxUploadSize" value="1000000000"/>    </bean>

然而通过debug初始化multipartResolver中发现,这个bean并没有注入到spring中,然后将这个bean放入在applicationContext.xml就成功注入了(暂时没有找到为什么dispatcher-servlet.xml中为什么注入不了,以前是可以的,以后找到了原因在进行分享吧,也希望读者提供帮助)

private void initMultipartResolver(ApplicationContext context) {        try {            this.multipartResolver = context.getBean(MULTIPART_RESOLVER_BEAN_NAME, MultipartResolver.class);            if (logger.isDebugEnabled()) {                logger.debug("Using MultipartResolver [" + this.multipartResolver + "]");            }        }        catch (NoSuchBeanDefinitionException ex) {            // Default is no multipart resolver.            this.multipartResolver = null;            if (logger.isDebugEnabled()) {                logger.debug("Unable to locate MultipartResolver with name '" + MULTIPART_RESOLVER_BEAN_NAME +                        "': no multipart request handling provided");            }        }    }
0 0
原创粉丝点击