上传文件提示: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 中手动指定上传文件的临时目录 :
spring:
  servlet:
    multipart:
      location: /data/tmp/updateFile

手动指定目录后,必须保证该目录在服务器中存在,并有读写的权限,创建该目录 mkdir -p /data/tmp/updateFile

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值