一个坑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);这里发生的错误。

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

posted @ 2018-11-30 14:34  五星上酱程序员  阅读(9693)  评论(0编辑  收藏  举报