Spring Boot 关于上传文件的一个bug
有一次线上项目需要上传一个excel文件的时候报错了,错误如下
org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request;nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1337767218595042057.80/work/Tomcat/localhost/ROOT] is not valid org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:112) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.
原因:
在linux
系统中,springboot
应用服务再启动(java -jar
命令启动服务)的时候,会在操作系统的/tmp
目录下生成一个tomcat*
的文件目录,上传的文件先要转换成临时文件保存在这个文件夹下面。由于临时/tmp
目录下的文件,在长时间(10天)没有使用的情况下,就会被系统机制自动删除掉。所以如果系统长时间无人问津的话,就可能导致上面这个问题。
解决:自定义tomcat的临时文件存储目录
server.tomcat.basedir=/data/apps/temp
PS:
如果用的是Spring Cloud Zuul 网关 在上传大文件的时候,那么就必须明确的将zuul中的上传控制交由处理的微服务来进行,所以应该在访问路径前追加有“/zuul/**”映射路径。