Class DefaultZipContainerDetector

java.lang.Object
org.apache.tika.detect.zip.DefaultZipContainerDetector
All Implemented Interfaces:
Serializable, org.apache.tika.config.SelfConfiguring, org.apache.tika.detect.Detector
Direct Known Subclasses:
StreamingZipContainerDetector

public class DefaultZipContainerDetector extends Object implements org.apache.tika.detect.Detector
This class is designed to detect subtypes of zip-based file formats. For the sake of efficiency, it also detects archive and compressor formats via commons-compress.

As a first step, it uses commons-compress to detect any archive format supported by commons-compress. If "zip" file is detected, then the ZipContainerDetectors are run to try to identify a subtype.

If an archive format that is not a zip is detected, that mime type is returned.

Finally, if the file is not detected as an archive format, this runs commons-compress' compressor format detector.

For TikaInputStream, file-based detection is used (TikaInputStream handles spilling to disk automatically if needed).

ZIP Salvaging

When a ZIP file cannot be opened directly (truncated or corrupted), and ParsingIntent.WILL_PARSE is present in the ParseContext, this detector will attempt to salvage the file using ZipSalvager. Salvaging reconstructs a valid ZIP structure from the local file headers.

When salvaging succeeds, Zip.SALVAGED is set to true in the metadata, and the salvaged ZipFile is stored in TikaInputStream.getOpenContainer() for reuse by parsers.

Note: If you use parsers directly without this detector (or without AutoDetectParser), salvaging will not occur and truncated files may fail to parse.

See Also:
  • Field Details

  • Constructor Details

    • DefaultZipContainerDetector

      public DefaultZipContainerDetector()
    • DefaultZipContainerDetector

      public DefaultZipContainerDetector(org.apache.tika.config.ServiceLoader loader)
    • DefaultZipContainerDetector

      public DefaultZipContainerDetector(List<ZipContainerDetector> zipDetectors)
  • Method Details

    • detect

      public org.apache.tika.mime.MediaType detect(org.apache.tika.io.TikaInputStream tis, org.apache.tika.metadata.Metadata metadata, org.apache.tika.parser.ParseContext parseContext) throws IOException
      Specified by:
      detect in interface org.apache.tika.detect.Detector
      Throws:
      IOException