SpringMVC文件上传MaxUploadSizeExceededException异常处理

本文介绍了在SpringMVC中遇到MaxUploadSizeExceededException异常时的处理方法。通过调整SpringMVC配置文件,设置最大上传文件大小,可以避免异常发生。然而,不同Tomcat版本可能需要不同的配置。使用SpringMVC拦截器是另一种解决方案,但即使如此,如果CommonsMultipartResolver配置不当,仍可能导致ERR_CONNECTION_RESET错误。解决办法是正确设置CommonsMultipartResolver的maxUploadSize属性,确保文件大小在允许范围内。
部署运行你感兴趣的模型镜像

SpringMVC是一个非常方便的web层框架,我们使用它的文件上传也非常的方便。在SpringMVC中实现文件上传,我们都会在SpringMVC的配置文件中进行上传大小配置。配置代码如下:

<!-- 文件上传的多部分解析器 -->
<bean id="multipartResolver"
	   class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<!-- 设置上传文件的大小 4M,如果同时传多个文件,则是所有文件的大小 -->
	<property name="maxUploadSize" value="4000000" />
	<!-- 字符编码的设置,默认是ISO-8859 -->
	<property name="defaultEncoding" value="utf-8" />
</bean>

运行结果,当上传文件大小没有超过4M,则上传是成功的。但是当上传大小超过配置,则会引发异常:MaxUploadSizeExceededException异常,针对MaxUploadSizeExceededException异常的处理,则需要在SpringMVC的配置文件中进行配置,配置如下:

<!-- 配置SpringMVC框架运行所抛出的异常处理 -->
<bean id="exceptionResolver"
		class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
	<property name="exceptionMappings">
		<props>
			<!-- 配置捕获什么类型的异常, MaxUploadSizeExceededException, /errorFile 是转跳的URL -->
			<prop
				key="org.springframework.web.multipart.MaxUploadSizeExceededException">
					/errorFile
			</prop>
		</props>
	</property>
</bean>

理论上,应该是可以了!当然,事实上只要你使用apache-tomcat-7.0.39这个版本的tomcat,上面的配置就是正确的。而如果是其他的Tomcat版本,则会出现如下情况,在浏览器上看到的效果如下:

所以你可以更换你的tomcat来解决这个问题。但显然这不是一个好的解决方案。还有一个相对完美的解决方案就是使用sprngMVC拦截器。

public class FileUploadInterceptor extends HandlerInterceptorAdapter {
	private long maxSize;

    @Override
    public boolean preHandle(HttpServletRequest request, 
    		HttpServletResponse response, Object handler) throws Exception {
        //判断是否文件上传
        if(request!=null && ServletFileUpload.isMultipartContent(request)) {
            ServletRequestContext ctx = new ServletRequestContext(request);
            //获取上传文件尺寸大小
            long requestSize = ctx.contentLength();
            System.out.println("文件大小是:"+requestSize);
            if (requestSize > maxSize) {
                //当上传文件大小超过指定大小限制后,模拟抛出MaxUploadSizeExceededException异常
                throw new MaxUploadSizeExceededException(maxSize);
            }
        }
        return true;
    }
    public void setMaxSize(long maxSize) {
        this.maxSize = maxSize;  //设置文件大小
    }	
}

拦截器需要在SpringMVC的配置文件中进行配置:

<!-- 文件大小的拦截器配置 -->
<mvc:interceptors>
	<mvc:interceptor>
		<mvc:mapping path="/**" />
		<bean class="com.bdqn.controller.FileUploadInterceptor">
			<!-- 设定限制的文件上传大小,其实这才是真正的文件大小配置 -->
			<property name="maxSize" value="4000000" />
		</bean>
	</mvc:interceptor>
</mvc:interceptors>

运行程序,发现文件超过大小配置还是会出现浏览器上的:ERR_CONNECTION_RESET错误提示。原因是请求还没有到达拦截器就引发了异常,返回到浏览器了。问题出现在最开始的:CommonsMultipartResolver对象的配置上,配置了上传文件大小,所以只要更改CommonsMultipartResolver对象的配置就行了,请看文章最前面的代码,把maxUploadSize属性的配置改成了1000000(100M),只要上传的文件在100M内,则不会出现错误了,可以根据需要再设置更大一些。

<!-- 文件上传的多部分解析器 -->
<bean id="multipartResolver"
	   class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<!-- 设置上传文件的大小 100M,如果同时传多个文件,则是所有文件的大小 -->
	<property name="maxUploadSize" value="100000000" />
	<!-- 字符编码的设置,默认是ISO-8859 -->
	<property name="defaultEncoding" value="utf-8" />
</bean>

 

您可能感兴趣的与本文相关的镜像

Linly-Talker

Linly-Talker

AI应用

Linly-Talker是一款创新的数字人对话系统,它融合了最新的人工智能技术,包括大型语言模型(LLM)、自动语音识别(ASR)、文本到语音转换(TTS)和语音克隆技术

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值