一、前言🔥
👨🎓作者:bug菌
💌公众号:猿圈奇妙屋
🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。
🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。
哈喽,小伙伴们,我是bug菌呀👀,不知不觉就一年又4月,正是踏青郊游的好时节。可上海疫情,除了在家远程办公就是看点技术顺便卷点文章。这不是4月又出了更文活动,逼自己一把,坚持每天做点内容输出,养成写作习惯,将来你会回来感谢曾经的自己坚持了一把才有此刻的辉煌成就。
小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻♀️,掘金不停💕,加油☘️
二、环境说明🔥
环境:jdk1.8 + springboot 2.3.1.RELEASE + mysql 5.6
三、排错分析🔥
非常离谱啊,这回遇到的报错,我不就是做了个多文件上传么,怎么得,这还得给我来个bug尝尝?拉低我coding效率?这小心思也忒坏了吧。
网络异常,图片无法展示|我是用的springboot框架,谁都知道,现在的单应用都通过它来作为项目基础架构。然后涉及到一个需求是要支持文件的批量保存,眼瞅这需求,我一刻钟把它搞定。谁知道,在我火急火燎的写完后,意外发生了,给我报了个错,猝不及防,我正把postman测试接口反馈成功截图发给前端小伙伴呢,吓得我立马撤回了群消息,这心想,有bug,到时候他们接起来报错又得来diss我,我可不干!
所以,我正打算定位问题并徒手干掉它!
如下是主要报错信息:
org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field files exceeds its maximum permitted size of 1048576 bytes.
如下是完整报错信息截图,仅供参考:
中译过来就是说:该上传的文件大小超过最大上传大小,1048576字节(1Mb
???),离谱啊就。眼瞅这报错,我大概心里知道是啥问题了;显示上传文件大小超过允许范围?超过谁的限制?这值得思考,定位到这儿,屏幕前的你是否察觉到什么端倪了没有?
我查阅相关文档,从这段文档中找到了答案。
如下是具体官文描述:
65.5 Handling Multipart File Uploads Spring Boot embraces the Servlet 3 javax.servlet.http.Part API to support uploading files. By default Spring Boot configures Spring MVC with a maximum file of 1Mb per file and a maximum of 10Mb of file data in a single request. You may override these values, as well as the location to which intermediate data is stored (e.g., to the /tmp directory) and the threshold past which data is flushed to disk by using the properties exposed in the MultipartProperties class. If you want to specify that files be unlimited, for example, set the multipart.maxFileSize property to -1.The multipart support is helpful when you want to receive multipart encoded file data as a @RequestParam-annotated parameter of type MultipartFile in a Spring MVC controller handler method.
我从提取文档中提取了一些比较有价值的信息,我们可以从这句:Spring Boot configures Spring MVC with a maximum file of 1Mb per file and a maximum of 10Mb of file data in a single request...
可以得知,说明对文件上传有默认最大限制,即最大可支持1MB的文件大小,在单个请求中最多可容纳10Mb的文件数据。且从这句disk by using the properties exposed in the MultipartProperties class...
可以得知,这个文件上传大小限制可以自定义,可以在你的配置文件(.properties/.yaml
)上自定义设置。(multipart.maxFileSize
)
ok!真相大白。知道为何报错了,我这就在配置文件上进行自定义配置。
四、解决方案🔥
从官网中可以看出,对于不同的springboot版本有一定的差异配置。如下我就以.properties文件语法进行举例说明啦,若是.yaml配置的话,语法你们就自己转写一下就行啦(实在不会也可以评论区求助).
Spring Boot 1.3.x或之前版本,配置如下:
multipart.maxFileSize=100Mb multipart.maxRequestSize=1000Mb
Spring Boot 1.4.x版本及以上,配置如下:
spring.http.multipart.maxFileSize=100Mb spring.http.multipart.maxRequestSize=1000Mb
Spring Boot 2.0版本及以上,配置如下:
spring.servlet.multipart.max-file-size = 100MB spring.servlet.multipart.max-request-size = 1000MB
💢注意:具体设置文件上限大小就依你们实际需求而定,我只是举个例子,设置的单文件最大100M,单个请求中文件总大小不超过1000M。如若没啥额外规定,按照我给的也足够满足啦。
五、示例🔥
如下是我实际在项目的配置文件所配置的文件默认上限,仅供参考:
application-test.yaml
#设置tomcat文件上传大小限制 spring: servlet: multipart: max-file-size: 100MB max-request-size: 1000MB
... ...
ok,以上这样就好啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~
六、往期推荐🔥
- 如何使用Mybatis-plus实现字段内容的自动填充?不会我就教你。
- 如何在swagger2中配置header请求头等参数信息?(若不会,我便手把手教你)
- Springboot系列(十六):集成easypoi实现word模板内循环导出多数据
- Springboot系列(十六):集成easypoi实现word模板图片导出
- Springboot系列(十六):集成easypoi实现excel多sheet表导入
- Springboot系列(十六):集成easypoi实现excel多sheet表导出
七、文末🔥
如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《SpringBoot零基础入门》,从无到有,从零到一!希望能帮到大家。
我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!