大牛?无他,唯手熟尔!

Linux下springboot+undertow+NoSuchFileException之解决

摘要:运行了好久的一个系统springboot+undertow架构的,用户突然反馈文件上传出问题了,怀着不可能的心态看了下错误日志,​提示有一个临时目录找不到NoSuchFileException: /tmp/undertow。于是度娘了下,发现了问题所在。

本文由草根java提供,转载请注明出处https://www.caogenjava.com/detail/116.html

前言:运行了好久的一个系统springboot+undertow架构的,用户突然反馈文件上传出问题了,怀着不可能的心态看了下错误日志,提示有一个临时目录找不到NoSuchFileException: /tmp/undertow。于是度娘了下,发现了问题所在。

环境:Linux、springboot、undertow

问题:文件上传报错

java.lang.RuntimeException: java.nio.file.NoSuchFileException: /tmp/undertow.1307744715448028781.4432/undertow5065267238966800211upload
        at io.undertow.server.handlers.form.MultiPartParserDefinition$MultiPartUploadHandler.beginPart(MultiPartParserDefinition.java:261) ~[undertow-core-2.1.0.Final.jar:2.1.0.Final]
        at io.undertow.util.MultipartParser$ParseState.headerName(MultipartParser.java:208) ~[undertow-core-2.1.0.Final.jar:2.1.0.Final]
        at io.undertow.util.MultipartParser$ParseState.parse(MultipartParser.java:123) ~[undertow-core-2.1.0.Final.jar:2.1.0.Final]
        at io.undertow.server.handlers.form.MultiPartParserDefinition$MultiPartUploadHandler.parseBlocking(MultiPartParserDefinition.java:232) ~[undertow-core-2.1.0.Final.jar:2.1.0.Final]
        at io.undertow.servlet.spec.HttpServletRequestImpl.parseFormData(HttpServletRequestImpl.java:837) ~[undertow-servlet-2.1.0.Final.jar:2.1.0.Final]
        at io.undertow.servlet.spec.HttpServletRequestImpl.getParameterMap(HttpServletRequestImpl.java:789) ~[undertow-servlet-2.1.0.Final.jar:2.1.0.Final]

错误原因

在Linux系统中,Spring Boot应用以java -jar命令启动时,会在操作系统的/tmp目录下生成一个tomcat(或undertow),上传的文件先要转换成临时文件保存在这个文件夹下面。由于临时/tmp目录下的文件,在长时间(10天)没有使用的情况下,就会被系统机制自动删除掉。所以如果系统长时间没有使用到临时文件夹,就可能导致上面这个问题。

问题解决

修改配置文件application.properties,增加一项配置

spring.servlet.multipart.location=/tmp/undertow


双11云服务器热购推广(腾讯云):2核+4G内存+3M带宽=688元/3年(仅限新用户)

除非注明,文章均为草根java原创,转载请注明本文地址: https://www.caogenjava.com/detail/116.html

上一篇:windows平台mysql绿色版5.7.21安装使用教程        下一篇:解决navicat导入excel数据日期是1900年的问题
网友评论,共0 发表评论
昵称:
评论:
验证码: 刷新验证码
双11云服务器热购
    购买建议:带宽不用太高了,1M就够用,多考虑内存。