背景
业务需要导入Excel文件,同时还需对Excel内容进行处理。Excel文件可能会很大, 因此需要异步处理Excel文件,否则前端会出现超时问题。
实现方式
@Async标注的方法,在执行的时候,将会在独立的线程中执行。
//异步处理程序
@Async
void handle(MultipartFile file) throws IOException{
}
controller中文件接收:
public ResultBean importExcel(MultipartFile file) throws IOException {
handle(file);
return ResultBean.success();
}
但是遇到了一个问题,在导入文件处理时,会不时的出现如下报错,导致导入失败。
java.io.FileNotFoundException: /usr/local/tomcat8/work/Catalina/localhost/dm/upload_f4974065_aeff_4cf1_879f_86121e249773_00000002.tmp (No such file or directory)
经过一番搜索,查到原因:当controller中的方法return后,MultipartFile会被回收,同时还会删除保存在tomcat中的临时文件,导致在处理时,会出现找不到文件的错误。
解决方式:自定义一个临时文件夹,先把上传的文件保存到临时文件夹中,最后在处理完后,在finally中删除文件。