# java上传文件错误提示:java.nio.file.NoSuchFileException: /tmp/undertow.xxxx.xxxxx,解决方案 ## 问题描述 在生产环境,有一个SpringBoot项目在上传文件时,导致用户无法正常上传文件。 提示如下错误信息:  ## 原因分析 * 在 Linux 系统中,Spring Boot 应用以 java -jar 命令启动时,会在操作系统的 `/tmp` 目录下随机生成一个 tomcat(或 undertow )临时目录,上传的文件先要转换成临时文件保存在这个文件夹中。 * 由于临时 `/tmp` 目录下的文件,在长时间(默认10天)没有使用的情况下,操作系统会执行 tmp 目录清理服务(systemd-tmpfiles-clean.service),导致 `/tmp/undertow.xxxx.xxxxxxx` 文件被清理; * 导致在上传文件时,java调用 Files.createFile(…) 在目录`/tmp/undertow.xxxx.xxxxxxx`下创建临时文件时,发现找不到目录,就会抛出以上的错误。 ## 解决方案 ### 临时解决方案 * 可以根据报错信息,新建 `/tmp/undertow.xxxx.xxxxxxxx` 目录,不影响用户正常使用。 * 执行 `mkdir -p /tmp/undertow.8760.570269926767628882`命令; ### 最终解决方案 * 在 `applicaiton.yml` 中手动指定上传文件的临时目录 : ```bash spring: servlet: multipart: location: /data/tmp/updateFile ``` 手动指定目录后,**必须保证该目录在服务器中存在,并有读写的权限**,创建该目录 `mkdir -p /data/tmp/updateFile` ## 快照 - https://img.cdn.apipost.cn/upload/user/0/log/a54f0e8f-cb65-4057-b69f-2efb7340f545.png - https://i3.wp.com/img.cdn.apipost.cn/upload/user/0/log/a54f0e8f-cb65-4057-b69f-2efb7340f545.png - https://788910.xyz/api/snapshot?p=3c137cf6d95e9875f2e1b90e9ac8c25a&u=https://img.cdn.apipost.cn/upload/user/0/log/a54f0e8f-cb65-4057-b69f-2efb7340f545.png