本帖子没有答案,只是说一下坑,余下的自己决定。
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);这里发生的错误。
写本博客目的虽然没解决大家的问题,只是提供我处理的过程参考参考,避免浪费更多的时间。
原文地址:https://www.cnblogs.com/daguozb/p/10043986.html