springMvc使用多线程处理请求,参数中有file时 ,报错找不到临时文件

一、原因,在springMvc处理请求参数中有file时,会将file临时存储到一个位置,等线程结束后,临时文件被删除。

但是如果使用了多线程(异步)处理请求,当这个请求分发到某个线程A后,主线程立即结束并将此临时文件删除,造成了A线程无法读取到这个文件,报出无法找到此文件。

二、解决方法,在下面代码中已经给出,我们在异步处理这个请求时,不要直接把文件传给下一级方法,而是把文件转化为java内存流对象后 ,再把流对象传给异步方法,这样就不会出现因为主线程删除文件导致的文件找不到错误了

 

 //springmvc接收到前端请求,并去调用uploadToSendmail方法
@RequestMapping(value = "/batchPaichong")
    public void batchPaichong(PaichongMenu paichongMenu) throws Exception{
        String to = paichongMenu.getAddr();
        String fileName = paichongMenu.getFile().getOriginalFilename();
        InputStream ips = paichongMenu.getFile().getInputStream();
        lawAnnSecondphaseService.uploadToSendmail(to,fileName,ips);
    }
//  uploadToSendmail方法使用异步处理
 @Async
    public void uploadToSendmail(String to, String fileName,InputStream ips){
        System.out.println("开始发送"+Thread.currentThread().getName());
        if(null!=ips){
            List<ExcelPaichong> paiChongList = getObjectFromExcel(fileName,ips);
            XSSFWorkbook workbook = getExcelFromObject(paiChongList);
            sendEmail(workbook,to);
            System.out.println("发送邮件成功"+Thread.currentThread().getName());
        }
    }

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
使用 Spring MVC ,如果在构建过程中出现程序包不存在或不到符号的错误信息,可能有以下几个原因: 1. 缺少依赖项:您的项目可能依赖于其他 Spring MVC 相关的程序包或库,但这些依赖项未正确安装或配置。请确保您的项目的依赖项(如Spring MVC、Spring Core等)已经正确添加到项目的构建文件(如pom.xml、build.gradle)中,并且已经正确下载和安装。 2. 包命名错误:请检查您的代码中是否正确引入了所需的程序包,包括正确的包名和类名。如果程序包不存在或不到符号,可能是因为包名或类名拼写错误或未正确导入。 3. 项目结构问题:请确保您的项目结构符合 Spring MVC 的要求,包括正确的文件夹结构和配置文件位置。例如,配置文件(如web.xml、springmvc-servlet.xml)应该放置在正确的位置,并且在构建过程中能够被正确加载。 4. 版本冲突:如果您的项目中存在依赖项版本冲突,可能导致程序包无法到或加载。请检查您的依赖项版本,并尝试更新或调整以解决冲突。 5. 编译问题:如果您在构建过程中遇到不到符号的错误,可能是因为编译出现了问题。请检查您的代码中是否存在语法错误或逻辑错误,并确保您的代码能够正确编译。 请根据上述原因逐一排查,确定造成程序包不存在和不到符号的具体原因,并采取相应的解决措施。如果您有其他问题,请随提问。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值