错误记录: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文件出错");
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值