springmvc支持多文件上传

这里我就不多讲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");
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值