Spring Boot 上传文件找不到临时目录
Java Spring Boot Undertow 评论 1 大约 1944 字日志信息
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.lang.RuntimeException: java.nio.file.NoSuchFileException: /tmp/undertow.1942731200127854712.9999/undertow6409253598725145197upload
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:523)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
错误原因
在Linux
系统中,Spring Boot
应用以java -jar
命令启动时,会在操作系统的/tmp
目录下生成一个tomcat*
(或undertow*
),上传的文件先要转换成临时文件保存在这个文件夹下面。由于临时/tmp
目录下的文件,在长时间(10
天)没有使用的情况下,就会被系统机制自动删除掉。所以如果系统长时间没有使用到临时文件夹,就可能导致上面这个问题。
解决办法
方法一
若使用的是Tomcat
(Undertow
无效),可使用以下配置。
server:
tomcat:
basedir: /data/app
方法二
使用命令行配置-Djava.io.tmpdir = /xxx
。
Undertow无效,临时目录未改变,仍是/tmp下。
nohup java -jar -XX:+UseG1GC app.jar --spring.profiles.active=test -Djava.io.tmpdir=/data/app >/dev/null 2>&1 &
方法三
使用配置类配置。(方法四配置文件方式底层也是使用此方法)
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/data/app");
return factory.createMultipartConfig();
}
方法四(推荐)
applicaiton.yml
(applicaiton.property
)
spring.servlet.multipart.location
底层就是createMultipartConfig
中的factory.setLocation
org.springframework.boot.autoconfigure.web.servlet.MultipartProperties#createMultipartConfig
spring:
servlet:
multipart:
location: /data/app
阅读 10279 · 发布于 2019-12-13
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
-
太难了 1楼
windows系统里出现这样的错误怎么办呢
Edge | Windows 10 2021-12-25
随便看看
换一批
-
Java jcmd 命令查看 JVM 各种信息阅读 1622
-
javac 错误: 编码 GBK 的不可映射字符阅读 1406
-
Spring Boot 使用 MongoDB 实现共享 Session阅读 4162
-
走进 Rust:配置 IDEA 开发环境阅读 5759
-
Java 中的锁 StampedLock阅读 2369
-
PostgreSQL 获取本月第一天时间戳等信息阅读 4893
-
Linux scp 远程主机之间传输文件阅读 98
-
软考-系统架构设计师:物联网 IoT阅读 1476
-
Linux 命令行快捷键 Ctrl+R 搜索上一个命令和下一个命令阅读 269
-
Spring 循环依赖:本地不报错,线上却报错阅读 368