項目場景:
Linux springboot上傳文件報錯:java.nio.file.NoSuchFileException: /tmp/undertowXXXXXX
問題描述:
系統使用頻率較低,用戶上傳附件時提示報錯:java.nio.file.NoSuchFileException: /tmp/undertow*****
原因分析:
查閱資料找到問題原因:
在 Linux 系統中,Spring Boot 應用以 java -jar 命令啟動時,會在操作系統的 /tmp 目錄下生成一個 tomcat(或 undertow )臨時目錄,上傳的文件先要轉換成臨時文件保存在這個文件夾下面。由於臨時 /tmp 目錄下的文件,在長時間(10天)沒有使用的情況下,系統執行了 tmp 目錄清理服務(systemd-tmpfiles-clean.service),導致 /tmp/undertow...8090 文件被清理,然而在上傳的時候,undertow 服務器需要創建/tmp/undertow...8090/undertow...upload 臨時文件,但是調用 Files.createFile(...) 的時候就會發現找不到父目錄,才導致了以上的錯誤。
解決方案:
在 applicaiton.yml(applicaiton.property) 中添加配置 :
spring:
servlet:
multipart:
location: /data/tmp
手動指定目錄后,必須保證該目錄存在,並有讀寫的權限,創建該目錄 mkdir -p /data/tmp