Spring Mvc 怎么上传超过全局配置的文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Mvc 怎么上传超过全局配置的文件?相关的知识,希望对你有一定的参考价值。

在文件上传的时候,Spring Mvc已经限制了上传文件的大小,在不动全局配置的情况下,怎么针对个别文件(大于配置的大小)上传?比如限制最大是2M,我现在需要上传一个20M的文件?咋办

springMVC是一个非常方便的web层框架,我们使用它的文件上传也非常的方便。
我们通过下面的配置来使用springMVC文件上传功能。
<bean id="multipartResolver" class="com.youth.controller.fileupload.MultipartListenerResolver">
<!-- 设置上传文件的最大尺寸为10M -->
<property name="maxUploadSize" value="10240"/>
<property name="maxInMemorySize" value="4096"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="resolveLazily" value="true"/> </bean>

Controller层我们这样接收文件
@RequestMapping("fileUpload")public void fileUpload(@RequestParam("myFile") MultipartFile multipartFile) throws Exception
String fileName = multipartFile.getOriginalFilename();
File f = createFile(fileName);
multipartFile.transferTo(f);


页面上记得指定enctype属性哦
<form method="post" enctype="multipart/form-data"></form>

如果你的springMVC配置是正确的,那么到此springMVC的文件上传功能已经可以用了。一切都很完美。
由于我们配置了maxUploadSize属性,那么如果我们的文件超过了10M会出现什么情况呢?
理论上系统会抛出MaxUploadSizeExceededException异常,那么如何处理呢?
springMVC异常处理的配置方式如下:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.Exception">redirect:/error.jsp</prop>
<prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">redirect:/MaxUploadSizeError.jsp</prop>
</props> </property><property name="defaultErrorView" value="redirect:/error.jsp"></property> <property name="defaultStatusCode" value="500"></property></bean>

上面的配置作用是如果系统抛出MaxUploadSizeExceededException异常,系统跳转到MaxUploadSizeError.jsp页面给用户以提示。
如果是其他Exception异常,则跳转到error.jsp页面。
接下来我们测试一下上面的异常处理是否生效了。
在你的代码任意地方试着抛出NullPointException异常,发现页面的确能跳转到error.jsp,证明我们的异常处理是生效的。
然后我们上传一个10M以上的文件,我们发现后台控制台抛出了MaxUploadSizeExceededException异常,我们期待着页面转向到MaxUploadSizeError.jsp。
参考技术A 不能改全局设置的话就只能用分片上传

spring mvc 怎么大小上传文件控制?

小弟在弄一个这个框架的上传,非常简单的input=file的上传,想知道怎么能在点确认上传的时候控制文件大小,超过多少M就不能上传, 用的是ibatis+spring java web的.求大神解答.谢谢谢.

1、SpringMVC的配置文件里面可以配置限制上传文件的大小,比如40MB,但是,如果在页面上上传超过40MB ,则他都不进入到Action,则直接就报错了。被拦截了。

2、客户端判断的话,IE8、IE9、火狐好像支持都不一样,有说用Flash的,有说用HTML5的,
个人感觉HTML5不太靠谱,毕竟现在的应用肯定是要支持IE8、IE9的。
参考技术A <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="123456" />
</>

追问

但是用这个的话,超过value的话我的程序会跳错误页.是哪配置不对吗.

追答

Spring API 中org.springframework.web.multipart.commons.CommonsMultipartResolver的resolveMultipart方法说明

public MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException

Throws:

MultipartException - if the servlet request is not multipart, or if implementation-specific problems are encountered (such as exceeding file size limits)

文件大小超出限制会抛出异常,应该是抛MaxUploadSizeExceededException

你可以在Controller中捕获一下,

@ExceptionHandler(MaxUploadSizeExceededException.class)

public String aaa(Model model)

model.addAttribute("errorMsg", "上传的文件太大啦!");

return "maxUploadSizeExceeded";



本回答被提问者和网友采纳

以上是关于Spring Mvc 怎么上传超过全局配置的文件?的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc怎么获取上传文件的原路径

mvc 无法上传大文件 提示超过长度

Spring MVC 文件上传功能详解

spring mvc 文件上传怎么过滤文件类型,如exe文件等

java spring mvc 客户端上传文件到服务器端

Spring MVC学习(10)—文件上传配置DispatcherServlet的路径配置请求和响应内容编码