• 一个坑poi大数据量导入时的java.lang.IllegalStateException: Zip File is closed


    本帖子没有答案,只是说一下坑,余下的自己决定。

    Caused by: java.lang.IllegalStateException: Zip File is closed

             at org.apache.poi3.openxml4j.util.ZipFileZipEntrySource.getEntries(ZipFileZipEntrySource.java:45)

             at org.apache.poi3.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:161)

             at org.apache.poi3.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:662)

             at org.apache.poi3.openxml4j.opc.OPCPackage.open(OPCPackage.java:223)

             at org.apache.poi3.openxml4j.opc.OPCPackage.open(OPCPackage.java:186)

             at com.iss.itms.util.excel.BigDataParseExcelUtil.process(BigDataParseExcelUtil.java:85)

             at com.iss.itms.ebankcertificate.EbankCertificateOperate.impdata(EbankCertificateOperate.java:405)

             at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

             at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

             at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

             at java.lang.reflect.Method.invoke(Method.java:498)

             at com.toft.core2.service.ServiceManager.callService(ServiceManager.java:74)

             ... 61 more

    我代码这个位置EbankCertificateOperate.impdata(EbankCertificateOperate.java:405)进行了解析传来的路径。

    这个错误的原因是路径错误,就是传来的excel的路径错误。

    具体的原因就是你的路径是在浏览器中选择获得的路径,但是大部分浏览器都进行了路径安全处理;就是路径都替换成了(C:fakepath---),然后就报错了。

    其中一个方法:通过一下jsp代码可以获得绝对地址:

    //附带不用修改浏览器安全配置的javascript代码,兼容ie, firefox全系列
    
    function getPath(obj)  
    {  
      if(obj)  
        {  
     
        if (window.navigator.userAgent.indexOf("MSIE")>=1)  
          {  
            obj.select();  
     
          return document.selection.createRange().text;  
          }  
     
        else if(window.navigator.userAgent.indexOf("Firefox")>=1)  
          {  
          if(obj.files)  
            {  
     
            return obj.files.item(0).getAsDataURL();  
            }  
          return obj.value;  
          }  
        return obj.value;  
        }  
    }  
    //参数obj为input file对象

    通过以上我本地成功了,但是部署测试环境也是不行。

    网上找到的方法都没解决,我就用流的方式。但还是报错a.io.IOException: Unable to read entire header; 0 bytes read; expected 512 bytes,这个没找到方法。

    最后我就有用了普通方法导入的excel。

    大数据量导入的方法见我另一个博客:https://www.cnblogs.com/daguozb/p/10031970.html,在OPCPackage pkg = OPCPackage.open(filename);这里发生的错误。

    写本博客目的虽然没解决大家的问题,只是提供我处理的过程参考参考,避免浪费更多的时间。

  • 相关阅读:
    1834. 单线程 CPU sort+优先队列 过了,学习vector<vector<int>>排序
    552. 学生出勤记录 II 力扣(困难) 记忆化搜索/dp 不会做,学习记忆化搜索转dp的学习
    526. 优美的排列 力扣(中等) dfs暴搜/ 状压dp是没想到的
    576. 出界的路径数 力扣(中等) 路径dp/记忆化搜索 都不会做
    1583. 统计不开心的朋友 力扣(中等) 模拟,思考一下
    233. 数字 1 的个数 力扣(困难) 数位dp/数学 不会做
    516. 最长回文子序列 力扣(中等) 区间dp,不会做
    446. 等差数列划分 II
    7.14 数据结构板子
    7.13 树上问题
  • 原文地址:https://www.cnblogs.com/daguozb/p/10043986.html
Copyright © 2020-2023  润新知