[六字真言]6.吽.SpringMVC中上传大小异常填坑

最近在讲课的时候,遇到了关于上传文件过大的时候浏览器无法响应的问题,配置了捕获异常,有的学生浏览器好使,有的学生浏览器不好用!莫名其妙!

MaxUploadSizeExceededException进入了无限的死循环,╮(╯▽╰)╭ 悲催! 为什么呢?

配置上传信息

在springmvc的核心配置文件配置如下信息

  1. <!-- 5.配置上传 -->
  2. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  3. <property name="defaultEncoding" value="UTF-8"/>
  4. <!-- 可以使用计算的 value="#{20*1024*1024}"/> -->
  5. <property name="maxUploadSize" value="20971520"/>
  6. <property name="maxInMemorySize" value="2048"/>
  7. <property name="resolveLazily" value="true"/>
  8. <!-- 配置的是虚拟路径 -->
  9. <property name="uploadTempDir" value="/uploadFile/temp"/>
  10. </bean>
  • id="multipartResolver" 需要去修改其id的名称
  • resolveLazily 属性启用是为了推迟文件解析,以便在上传操作中捕获文件大小异常

第一种方式:Controller使用异常注解

  1. @ExceptionHandler(Exception.class)
  2. public String handleException(Exception ex,HttpServletRequest request) {
  3. if(ex instanceof org.springframework.web.multipart.MaxUploadSizeExceededException){
  4. request.setAttribute("error", "上传文件过大");
  5. }
  6. return "要转向的页面,可以自由定义或者是原页面.";
  7. }

第二种方式:统一异常处理方式

在SpringMVC的核心配置文件配置统一的异常信息处理

  1. <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
  2. <property name="exceptionMappings">
  3. <props>
  4. <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">maxUploadExceeded</prop>
  5. </props>
  6. </property>

问题: 使用拦截器解决客户端无响应问题

关于spring mvc MaxUploadSizeExceededException 死循环解决方案

这个问题困扰了我很久了,其实我之前有一种解决方案是在前端进行判断操作,哈哈,之后的笔记会给大家奉献上!

在springmvc的核心配置文件配置如下信息

  1. <!-- 5.配置上传 -->
  2. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  3. <property name="defaultEncoding" value="UTF-8"/>
  4. <!-- 可以使用计算的 value="#{20*1024*1024}"/> -->
  5. <property name="maxUploadSize" value="20971520"/>
  6. <property name="maxInMemorySize" value="2048"/>
  7. <!-- 配置的是虚拟路径 -->
  8. <property name="uploadTempDir" value="/uploadFile/temp"/>
  9. </bean>

没有定义延时解析

定义拦截器

  1. public class FileUploadInterceptor extends HandlerInterceptorAdapter {
  2. @Override
  3. public boolean preHandle(HttpServletRequest request , HttpServletResponse response , Object handler )
  4. throws Exception {
  5. if(request!=null && ServletFileUpload.isMultipartContent(request)) {
  6. ServletRequestContext ctx = new ServletRequestContext(request);
  7. long requestSize = ctx.contentLength();
  8. if (requestSize > maxSize) {
  9. throw new MaxUploadSizeExceededException(maxSize);
  10. }
  11. }
  12. return true;
  13. }
  14. private long maxSize;
  15. public void setMaxSize(long maxSize) {
  16. this.maxSize = maxSize;
  17. }
  18. }

配置拦截器

  1. <mvc:interceptor>
  2. <mvc:mapping path="/**"/>
  3. <bean class="com.shxt.interceptor.FileUploadInterceptor">
  4. <property name="maxSize" value="4194304"/>
  5. </bean>
  6. </mvc:interceptor>

来自为知笔记(Wiz)

时间: 2024-10-13 20:15:23

[六字真言]6.吽.SpringMVC中上传大小异常填坑的相关文章

[六字真言]4.叭.SpringMVC异常痛苦

"叭",除畜生道劳役之苦: 在学过的三阶段的时候,我们对SpringMVC的异常处理,一直可以算是简单中透着暴力,不要不重视异常!真的很重要,不要让它处在尴尬的位置! 在二阶段或者说三阶段中,技术一方面其中我认为最关键的地方是MVC思想的理解,对MVC理解程度决定着你学习过程中的难易程度,虽然有点夸张! 例如,当我们产生了一个 非业务异常 ,或者 非本业务可以处理的其他业务异常 ,那么我们一般会一直往 上层抛 (或者适当包装后继续抛出)直到 控制层 [我们就是这么解决问题,不知道你是否

诚念六字真言的一点体悟

六字真言: 嗡(ong)嘛(ma)呢(ni)呗(bei)咪(mei)吽(hong) 中文的发音有多种,但其实这并不重要,按自己的感觉和喜欢的念就行, 念这个,其实我也没有什么正式规矩怎样怎样的念,有时候心念或听乐曲上的. 后来偶有做恶梦,在梦中我竟然也能念起,然后便恐惧退散了!~ 呵呵,这不管是心理作用还是其他什么,总觉得应该是不错的,毕竟此咒含有诸佛无尽的加持和慈悲,是诸佛 慈悲和智慧的音声显现,此咒即是观世音菩萨的微妙本心! 嗡嘛呢呗咪吽

[六字真言]2.嘛.异常定制和通用.md

幻世当空 恩怨休怀 舍悟离迷 六尘不改 且怒且悲且狂哉! 最近一直在循环的一首歌! 丰富自己,比取悦他人更有力量.种下梧桐树,引得凤凰来.你若盛开,蝴蝶自来! 言归正传! 言归正传! 不要去大包大揽 人懒就是动力,我上课的时候为了图省事,经常利用 Exception 捕捉所有潜在的异常这里更正一下,这样的思想不对的,人的能力和经历是有限的,不要让他成为万能的! publicvoid update(User user){ try{ // 假设场景 //…抛出 IOException 的代码调用 /

[六字真言]3.呢.异常的谎言,你要相信多少次?

"嘛,呢",梵文意为"如意宝",表示"宝部心",又叫嘛呢宝,其实就是有"聚宝"的意思! 现在的社会现在的人,都是喜欢虚的假的,不喜欢真的诚的,谁虚伪谁高人一等,谁真诚谁傻瓜一个,这句话很现实的,会做的不如会说的. 这就是现实,真情可贵,用心陪醉,虚伪面对,从容领会,我就是永远都学不会 不知道最近心是怎么样了,周围发生了一些固有的定律,其实知道,只是不说!有的时候感觉大家都是聪明人,但是都在做不聪明的事情! 重复多次的"

[六字真言]5.咪.功力不足,学习前端JavaScript异常

A Guide to Proper Error Handling in JavaScript 这是关于JavaScript中异常处理的故事.如果你相信 墨菲定律 ,那么任何事情都可能出错,不,一定会出错!这篇文章中我们来看下JavaScript中的出错处理.文章会覆盖异常处理使用的正反例,然后看下ajax的异步处理. JavaScript的事件驱动机制让JavaScript更加丰富,浏览器好比就是一个事件驱动的机器,错误也是一种事件.当一个错误发生时,一个事件就在某个点抛出.理论上,有人会说错误

springmvc上传文件异常

症状: error:org.springframework.web.multipart.MultipartException: Current request is not a multipart request at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:188)

Tomcat-上传文件路径填坑

起因 公司研发人员 部署服务在阿里云 ecs 服务器; 上传文件过2周左右文件自动丢失; 系统环境: Centos-7.2 容器: Tomcat 8.5.15.tar.gz 2.tomcat 服务层解决办法: JVM_OPTIONS="-Xrs -Xms256m -Xmx512m -Djava.io.tmpdir=/data/app/upload" 3.程序解决办法: 框架配置文件新增: application.properties server.tomcat.basedir=/dat

WebApi传参总动员(填坑)

本以为系列文章已经Over,突然记起来前面留了个大坑还没填,真是自己给自己挖坑. 这个坑就是: (body 只能被读取一次)Only one thing can read the body MVC和WebAPI之间的一个关键不同点在于MVC缓存请求主体(request body).这意味着MVC的参数绑定可以反复从body中查找参数片断.然而,在WebAPI中,请求主体(HttpContent) 只能被读取一次,不被缓存,只能向前读取的流.这意味着parameter binding需要谨慎对待s

微信网页中上传文件时“只能选择SD卡中的文件”问题

需求描述:在微信网页中上传文件到我们自己的服务器,使用 input  type=file标准控件: <input type="file" name="upfile" id="upfile" > 问题来了:苹果可以顺利上传图片文件的,安卓下每次选择完图片文件之后会弹出提示"只能选择SD卡中的文件"不能上传图片.手机已经设置默认存储为SD卡. 百度搜了一个下午没有结果,微信公众平台更没有答案shiiiit. 最后在cs