在做项目开发的过程中,会遇到文件上传的需求,文件上传的大小就需要我们开发人员进行控制,防止过大的文件导致后续操作的失败,比如:过大的excel(07版本)文件解析过程中导致后台内存溢出。
springBoot 文件上传大小配置
一次请求大小控制
一次request请求,所有文件的大小之和。
文件大小控制
上传的文件的每个大小
1 | spring: |
在配置的过程中,max-file-size 要小于等于 max-request-size,并且都要配置,因为spring在验证的时候,是先验证 你的所有文件大小是否小于 max-request-size , 如果满足 然后再分别验证 每个文件是否都小于max-file-size这个值,所以在开发过程中你只配置 max-file-size 是不行的。会抛出MultipartException异常信息。
同时,我们要将这个异常告诉前台,比如:当前台用户选择了一个大于我们配置100M大小的文件上传的时候,我们希望给前台一个友好的提示,告诉他,我们系统最大支持100M,
springBoot 异常处理
- @ExceptionHandler 使用
1 |
|
这样,当我们前台上传大于我们配置的文件的时候,应该就可以接受到我们返回的信息了吧?然而并没有
tomcat 文件大小的配置
- tomcat 上传文件大小配置
我们的springBoot项目是运行在tomcat中的(jar包部署的也类似,只是内置的tomcat),所以我们只在springBoot项目中配置文件的大小配置是不合适的,因为tomcat默认允许的最大文件上传大小可能就比你配置的要小,并且当tomcat配置的文件大小小的时候,我们通过httpRespose返回的友好提示,根本无法返回。请求会直接变成500(这里还有tomcat上传大小的一个坑).
修改tomcat\conf\server.xm下的Connector节点,增加maxSwallowSize=”-1”的配置。再上传大文件的时候,服务端正确响应。1
<Connector maxSwallowSize="-1" connectionTimeout="20000"port="80" protocol="HTTP/1.1" redirectPort="8443"/>
不管配置成 -1 这个不推荐,-1代表tomcat不对文件上传大小做校验,尽量配合项目配置合适的大小,比项目大一点就可以了。
配置了tomcat我们前台就可以拿到友好的提示信息了,当然如果你还有nginx,或者其他的代理,都需要对文件大小进行配置。