最近忙里忙外,几乎都忘记有写博客这件事情了,感觉如果再不写的话就很难再去写了。好的,废话少说,下面正式我的写博客之旅。
刚刚在敲代码的时候突然测试那边一个帅哥发了一张截图过来说是导入方案失败了,叫我马上排查修复。无奈之下只能先暂时放下手头的工作帮他解决问题。具体报错截图如下图所示:
遇到问题,第一件事肯定是打开xshell登进后台服务器查看相关日志。一查看日志发现还过真报错了,具体报错截图如下所示:
从如上截图大家可以看出程序中抛出了Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/work/Tomcat/localhost/xxxxxx] is not valid(这里的xxxxxx代指为文件名)这样的异常,单从字面上理解我就首先推断出既然/tmp/work/Tomcat/localhost/xxxxxx这个临时上传位置无效,那就说明很大可能/tmp/work/Tomcat/localhost/xxxxxx这个路径对应的文件夹是不存在的,于是直接cd /tmp/work/Tomcat/localhost后发现果真不存在xxxxxx这个文件夹,紧接着果断mkdir xxxxxx创建了xxxxxx文件夹。这个bug应该已经被我解决了吧?我上去相关页面一测发现已经可以成功导入了!
为什么会出先这个报错呢?网上有个小伙子解释得还是挺有道理的,我贴出来给大家看下。
spring boot的应用服务在启动的时候,会生成在操作系统的/tmp目录下生成一个tomcat.*的文件目录,用于"java.io.tmpdir"文件流操作。
程序对文件的操作时:会生成临时文件,暂存在临时文件中;lunix 系统的tmpwatch 命令会删除10天未使用的临时文件;长时间不操作,导致/tmp下面的tomcat临时文件目录被删除,且删除的文件不可恢复,上传文件时获取不到文件目录,所以就报错啦。
当然我这个解决方案并不是唯一的,网上还有另外的解决方案,这里我列出常用的两种:
1.解决方案1:重启下springboot项目;
2.解决方案2:在springboot的配置文件里加个配置 ,如下所示:
server.tomcat.basedir=/app/temp
这个路径需要你在Linux根目录下下建个/app/temp文件 。
参考博客: