springboot 上传大文件由于同步逐条处理,响应慢,用户体验差。采用上传文件后,交给子线程异步处理,主线程及时响应。
同时上传多文件 ,会偶现报错 /tmp/XXX/tomcat/XXX 。
springboot文件上传,会创建临时目录保存临时文件,处理完后会清除。
采用主线程同步处理文件,会在文件处理后清除,不会报错。采用异步处理文件,当主线程先返回用户响应,临时目录中的文件会被清除。而此时子线程还在继续处理主线程传的文件流,处理时就会找不到文件报错。
查了下网上现有方案:
重新另外指定临时目录路径: 在配置文件中加上 =/opt/data
依然报错,问题仍然存在
正确方案:
将上传的文件另外保存在服务器上。
byte[] bytes = (());
将接收到的文件流保存到byte[]里,然后再将byte[]传给异步处理的线程,问题解决。