欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

spring boot-The temporary upload location [ ] is not valid

发布时间:2024/9/19 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 spring boot-The temporary upload location [ ] is not valid 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

前言

  • spring boot 2.0.0.RELEASE
  • linux RH7

现象

19/09/10 17:17:02.185 ERROR 182 o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.5049141901586548468.8081/work/Tomcat/localhost/ROOT] is not valid] with root cause java.io.IOException: The temporary upload location [/tmp/tomcat.5049141901586548468.8081/work/Tomcat/localhost/ROOT] is not validat org.apache.catalina.connector.Request.parseParts(Request.java:2844)at org.apache.catalina.connector.Request.parseParameters(Request.java:3216)at org.apache.catalina.connector.Request.getParameter(Request.java:1137)at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:381)at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:75)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)

原因

  • spring boot的应用服务在启动的时候,会生成在操作系统的/tmp目录下生成一个Tomcat.*的文件目录,用于"java.io.tmpdir"文件流操作TomcatEmbeddedServletContainerFactory。
  • 程序对文件的操作时,会生成的临时文件,暂存在临时文件中。
  • linux 系统的tmpwatch 命令会删除10天未使用的临时文件。长时间不操作,导致导致/tmp下面的tomcat临时文件目录被删除。该删除的文件不可恢复,上传文件时获取不到文件目录,报错。
  • 解决办法1

    重启服务,临时方案:会重新生成tomcat目录,但是生产环境不建议如此操作

    解决办法2

    指定tmpdir目录。启动时,使用 jvm 参数 -Djava.io.tmpdir=/home/weba。

    解决办法3(推荐方法)

    指定tomcat的basedir目录。在 application.properties 中配置server.tomcat.basedir=/home/weba。

    参考

    了解basedir目录
    Spring Boot Reference Guide(2.0.0.RELEASE)

    总结

    以上是生活随笔为你收集整理的spring boot-The temporary upload location [ ] is not valid的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。