Aspose.Cells生成的XLSX文件被Tika误识别为application/zip求助
Aspose.Cells生成XLSX文件被识别为application/zip的问题
问题概述
使用com.aspose:aspose-cells:24.12生成的XLSX文件可被MS Excel正常打开,但通过org.apache.tika:tika-core:3.0.0检测MIME类型时,结果为application/zip;而常规XLSX文件的检测结果为application/x-tika-ooxml,部分在线MIME检测工具也将其识别为application/zip。
相关代码
Aspose.Cells生成XLSX代码
... var outputStream = new ByteArrayOutputStream(); var workbook = new Workbook(inputStream); workbook.save(entityStream, SaveFormat.XLSX);
Tika检测MIME类型代码
byte[] filecontent = ... var result = new Tika().detect(filecontent);
解压后的[Content_Types].xml内容
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" /> <Default Extension="xml" ContentType="application/xml" /> <Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" /> <Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml" /> <Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml" /> <Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml" /> <Override PartName="/docProps/custom.xml" ContentType="application/vnd.openxmlformats-officedocument.custom-properties+xml" /> <Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" /> <Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" /> <Override PartName="/xl/worksheets/sheet2.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" /> <Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml" /> </Types>
问题解答
1. 文件本身是否存在问题?
文件没有功能性问题。XLSX本质是符合OOXML规范的ZIP压缩包,能被MS Excel正常打开,说明其内部结构、内容完全符合Excel的读取标准,不影响日常使用。
2. 为什么会被识别为application/zip?
Tika的MIME检测逻辑分为两层:
- 首先检查文件魔数,XLSX和ZIP的魔数都是
50 4B 03 04,会先标记为ZIP类型; - 后续需要解压文件,检查内部的[Content_Types].xml或特定路径文件,才能识别为具体的OOXML类型。
Aspose生成的文件被识别为ZIP,主要原因是仅使用tika-core模块时,缺少深度解析OOXML的能力,需要配合完整的解析器包才能完成精准识别。另外,Aspose生成的ZIP包在压缩元数据(如文件顺序、压缩级别)上与MS Excel生成的略有差异,也可能导致部分检测工具仅停留在ZIP层面的识别。
3. 解决建议
- 补充Tika依赖:添加
tika-parsers-standard-package依赖(版本与tika-core保持一致,即3.0.0),完整解析器包可深度解析OOXML结构,正确识别为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet(或Tika封装的application/x-tika-ooxml); - 调整Aspose保存参数:使用
OoxmlSaveOptions设置严格的OOXML合规性,示例代码:OoxmlSaveOptions options = new OoxmlSaveOptions(SaveFormat.XLSX); options.setCompliance(OoxmlCompliance.ISO_29500_2008_STRICT); workbook.save(entityStream, options); - 手动辅助判断:若无法添加依赖,可结合文件扩展名辅助识别,或自定义Tika Detector,通过检查内部是否存在
/xl/workbook.xml路径来判定为XLSX。
内容的提问来源于stack exchange,提问作者Vytautas Arminas
相关产品推荐
相关产品推荐

