zoukankan      html  css  js  c++  java
  • 一个坑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);这里发生的错误。

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

  • 相关阅读:
    SPOJ SAMER08A
    SPOJ TRAFFICN
    CS Academy Set Subtraction
    CS Academy Bad Triplet
    CF Round 432 C. Five Dimensional Points
    CF Round 432 B. Arpa and an exam about geometry
    SPOJ INVCNT
    CS Academy Palindromic Tree
    身体训练
    简单瞎搞题
  • 原文地址:https://www.cnblogs.com/daguozb/p/10043986.html
Copyright © 2011-2022 走看看