关于文件上传遇见的异常解析
异常
Failed to parse multipart servlet request; nested exception is java.lang.RuntimeException:
java.nio.file.NoSuchFileException:/tmp/undertow.22083.8203669402141081167/undertow2317631067248432357upload
异常类型为找不到这样的文件,也就是异常信息里的文件路径没有文件。这种异常一般发生在项目运行一定的时间却没有访问文件上传接口导致的。因为springboot在处理文件上传时,会在服务器的/tmp目录下保存临时文件。然后/tmp目录是会被linux进行清理的,如果目录下的内容长时间没有发生改变,就会被删除。长时间一般为十天。
也就是说系统已经有至少十天的时间没有访问该接口。而这个目录是在项目启动的时候创建的,很显然,项目不可能会频繁重启。
解决办法 在yaml中配置
spring:
servlet:
multipart:
# 配置临时文件的路径
location: /path
建议在启动项目时建立后好文件目录,然后配置一下路径。因为即使在配置文件中设置后,重启项目还是有可能会出现此异常。
总结 在编写文件上传接口时,需要指定用户文件的保存路径。一是防止NoSuchFile异常,二是保护调试案发现场。