springboot上传文件异步处理,报错文件找不到 java.io.FileNotFoundException

1,051 阅读1分钟

场景

  • springboot 上传大文件由于同步逐条处理,响应慢,用户体验差。采用上传文件后,交给子线程异步处理,主线程及时响应。

问题

  • 同时上传多文件 ,会偶现报错java.io.FileNotFoundException /tmp/XXX/tomcat/XXX 。

原因

  • springboot文件上传,会创建临时目录保存临时文件,处理完后会清除。

  • 采用主线程同步处理文件,会在文件处理后清除,不会报错。采用异步处理文件,当主线程先返回用户响应,临时目录中的文件会被清除。而此时子线程还在继续处理主线程传的文件流,处理时就会找不到文件报错。

解决方案

  1. 主线程同步上传文件

  2. 使用异步线程,把上传的文件保存在服务器上