poi3 11 excel2007-poi3.11 linux 下解析了不excel2007 但win7下没问题

问题描述

poi3.11 linux 下解析了不excel2007 但win7下没问题

使用spring mvc 上传文件。POI 在linux 64位下解析不了excel2007文件。而win7 32位下没问题。使用wps创建的excel都没问题。经过调试发现window下,上传文件的时候文件头是847d1caa,当写入本地再读取后会将文件头改为504b0304(zip格式),所以可以正常运行。但linux下再读取文件头也不会变,导致POI识别不了。代码如下:
@RequestMapping(value = "uploadPriceXlsFile", method = RequestMethod.POST)
public @ResponseBody String upload(HttpServletRequest req, HttpServletResponse resp
) throws Exception
{
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
HashMap request = new HashMap();
if (isMultipart) {
DiskFileItemFactory factory = new DiskFileItemFactory(1024 * 1024 * 20, null);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
upload.setSizeMax(1024 * 1024 * 20);

        List<FileItem> fileItems = upload.parseRequest(req);
        Iterator<FileItem> iter = fileItems.iterator();
        while (iter.hasNext()) {
            FileItem item = (FileItem) iter.next();
            if (item.isFormField()) {
                String name = item.getFieldName();
                String value = item.getString("UTF-8");
                request.put(name,value);
            } else {
            String filename = item.getName();
               byte b[]=item.get();
            for(int i=0;i<5;i++){
            logger.debug(b[i]+"------------------------------");
            }
            //文件头显示为847d1caa  byte[-124,125,28,-86,123]
            logger.debug(Test.bytesToHexString(b));
            String realPath = req.getSession().getServletContext().getRealPath("/WEB-INF/upload");
            //File uploadFile = new File(realPath+"/"+filename);
            FileUtils.copyInputStreamToFile(item.getInputStream(), new File(realPath,filename));
            File uploadFile = new File(realPath+"/"+filename);
                InputStream in=new FileInputStream(uploadFile);
                in.read(b);
                logger.debug(b[0]+"---"+b[1]+"---"+b[2]);
                //window服务器则会变成504b0304 byte[80.75.3] <span></span>                                                     logger.debug(Test.bytesToHexString(b));
                logger.debug("编码格式"+"     "+System.getProperty("file.encoding"));
                return memberService.uploadPriceXLS(in,filename);
            }
        }

}
文件头847d1caa(对应byte[-124,125,28,-86,123..])是啥文件? 为啥win7读出来文件头就变504b0304(zip格式 对应byte[80.75.3....]) ,而linux则不会改变报以下错误(版本不支持) exception:org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]

请各位大侠帮帮忙,谢谢

解决方案

像这种工作,office自然对windows支持好,你应该在windows下处理excel,linux下各种兼容问题肯定很多

时间: 2024-10-29 04:45:22

poi3 11 excel2007-poi3.11 linux 下解析了不excel2007 但win7下没问题的相关文章

vs2008在winxp下开发的程序,在win7下的vs2013打不开

问题描述 如题.我使用vs2008在winxp下开发的C#程序,在其他winxp系统中运行很好.想在win7下使用vs2013重新编译,但是打不开.使用高版本Framework编译低版本Framework程序,应该是没问题的吧? 解决方案 解决方案二:我是否应该下载一个适合64位的VS2008,在win7上重新安装并编译呢?解决方案三:阿拉正准备这样升级呢,求前辈解惑从05到08很顺畅,接下来会这样吗?应该是OS的缘故?但Win7的兼容性貌似还不错啊.XP+VS08下的项目,部署到Win7里面跑

androidmanifest-Android下解析Androidmanifest有问题

问题描述 Android下解析Androidmanifest有问题 在Android下输入一个apk,然后解析其中的Androidmanifest.xml文件,得到其中的permission信息. 所以先用XMLPrinter进行解码,得到Androidmanifest.xml解密后正常的xml,再进行xml解析. 但是结果出现这种错误.求解! Process: com.softsec.konghaohao.permissionxml, PID: 5147 java.lang.IllegalAc

php-PHP网站在win7下运行错误

问题描述 PHP网站在win7下运行错误 如图,同事在linux下能正常运行.我在win7下就出错了.主要就是undefined index的错误.还有一个是yii应用程序只能被产生一次.能进网站的欢迎页.麻烦大家看看.谢谢了 解决方案 一般是文件夹权限或者是缺少某个模块. 解决方案二: 参考PHP Notice: undefined index 完美解决方法 定义一个函数: function _get($str){ $val = !empty($_GET[$str]) ? $_GET[$str

win7下activex控件进行数字签名

问题描述 win7下activex控件进行数字签名 win7下进行activex控件进行数字签名到最后一步出现一个提示框:上面显示Windows无法构建申请的证书路径 解决方案 看上去是你签名的证书有问题.不被信任

【Linux】将Oracle安装目录从根目录下迁移到逻辑卷

[Linux]将Oracle安装目录从根目录下迁移到逻辑卷   1.1  BLOG文档结构图     1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① Linux逻辑卷的创建和管理(重点) Tips: ① 本文在itpub(http://blog.itpub.net/26736162).博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaim

java-在linux(windos)系统下解析加壳的apk

问题描述 在linux(windos)系统下解析加壳的apk 最好纯java代码 不要依赖组件 比如aapt 我用过aapt windos还好 linux需要的依赖太多 解决方案 首先加壳的方法和代码都是从Jack_Jia的博客学习的. 详见:http://blog.csdn.net/jiazhijun/article/details/8678399 由于本人从c++开发直接跳到Android开发,没有对android进行系统的学习,看上面博客时还是有很多不理解的地方.本文把不理解的地方梳理一下

csv-如何在linux系统解析EXCEL文件?

问题描述 如何在linux系统解析EXCEL文件? 如题所示,现在有个项目,需要在linux环境下:1:直接解析xls文件2:或者用linux下的什么命令.工具之类把.xls文件转存为.csv文件,然后再读取csv文件 小弟不才,目前只实现了读取csv文件但是如何直接读取xls文件和""xls-->csv""文件转换,目前找不到有效的方法 请大大们帮忙. 解决方案 可以用libxlhttp://www.libxl.com/ 解决方案二: 可以参考这个博客:ht

ORA-15061 reported while doing a file operation with 11.1 or 11.2 ASM after PSU applied in database

ORA-15061 reported while doing a file operation with 11.1 or 11.2 ASM after PSU applied in database home [ID 1070880.1] --------------------------------------------------------------------------------     修改时间 26-OCT-2011     类型 PROBLEM     状态 PUBLIS

《树莓派实战秘籍》——1.11 技巧11进入Headless模式

1.11 技巧11进入Headless模式 虽然树莓派支持1080p的HDMI视频输出,但对很多项目来说,接上一个视频显示器既不经济也不实际.以下是不带显示器的情况下的相关内容. 树莓派经常被吹捧为一种廉价的计算机,但如果你没有现成的显示器和其他各种可用外设,成本将会飞速上升.此外,由于树莓派用于创意项目的最吸引人的特点之一就是它的尺寸很小.因此,你很可能会发现你需要在"headless"模式下运行:没有显示器.没有键盘.也没有鼠标,只有Pi单飞(如果你正在搭建技巧44,那正符合字面意