场景
- springboot 上传大文件由于同步逐条处理,响应慢,用户体验差。采用上传文件后,交给子线程异步处理,主线程及时响应。
问题
- 同时上传多文件 ,会偶现报错java.io.FileNotFoundException /tmp/XXX/tomcat/XXX 。
原因
-
springboot文件上传,会创建临时目录保存临时文件,处理完后会清除。
-
采用主线程同步处理文件,会在文件处理后清除,不会报错。采用异步处理文件,当主线程先返回用户响应,临时目录中的文件会被清除。而此时子线程还在继续处理主线程传的文件流,处理时就会找不到文件报错。
解决方案
-
主线程同步上传文件
-
使用异步线程,把上传的文件保存在服务器上