错误记录:springboot+async异步导入excel报错

一个简单的上传excel操作,只不过是异步解析,却一直报错:

/tmp/tomcat.7249967840843892717.80/work/Tomcat/localhost/ROOT/upload_acc8f0ff_e428_4675_8228_7d22d855d356_00000008.tmp (No such file or directory)

检查后发现写法并没有错误,该有的注解一个不少,但是上传到服务器就是找不到文件,在file.getInputStream()时报错

最后发现是异步导致的

  1. 后台用MultipartFile接收到前端传来的文件后,会在本地生成一个临时文件,以.tmp结尾;
  2. MultipartFile对应的临时文件的生命周期是一个请求会话,会话结束,MultipartFile的临时文件会被自动清理;
  3. 所以获取文件流不能在异步方法里,此时文件已经被清理

解决方法:在主流程中将MultipartFile转为一个临时存在的文件进行异步操作,操作完成后删除该文件。

service

	@Override
    public void importFile(MultipartFile file) {
        // MultipartFile对应的临时文件的生命周期是一个请求会话,会话结束,MultipartFile的临时文件会被自动清理;
        // 异步导入需生成一个一直存在的临时文件,最后删除
        try {
            File excelFile = FileUtils.multipartFileToFile(file);
            lssVipInfoServiceAsync.analyzeFile(excelFile, lssVipImportFileBo.getId(), UserInfoContext.getUserInfo().getUsername());
        } catch (Exception e) {
            throw new RuntimeException("系统解析Excel文件出错");
        }
    }

你可能感兴趣的:(spring,boot,excel,后端)