5

私の jboss は、zip ファイルの解凍プロセス中にエラーを表示します。

エラーメッセージ

14:36:20,663 ERROR [STDERR] org.apache.commons.compress.archivers.zip.UnsupportedZipFeatureException: unsupported feature data descriptor used in entry mimetype
14:36:20,663 ERROR [STDERR]     at org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.read(ZipArchiveInputStream.java:245)
14:36:20,663 ERROR [STDERR]     at java.io.InputStream.read(Unknown Source)

これはtest.epubのエントリの一部です

Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
  20  Stored       20   0% 03-18-2013 14:39 2cab616f  mimetype
   0  Stored        0   0% 03-18-2013 10:42 00000000  META-INF/
 265  Defl:N      187  29% 03-18-2013 10:42 4d7842ce  META-INF/container.xml
1048  Defl:N      271  74% 03-18-2013 10:42 c04d123d  META-INF/encryption.xml
   0  Stored        0   0% 03-18-2013 12:05 00000000  OEBPS/
1014  Defl:N      530  48% 03-18-2013 12:05 cb8218d1  OEBPS/9.html

LIB : commons-compress-1.4.jar 1.5 バージョンでも同じエラー メッセージが表示されました。

エラーが発生した理由と修正方法を知っている人はいますか??

コードを追加する

public void unzip(InputStream is, File destDir, String charsetName)
        throws IOException {
    ZipArchiveInputStream zis;
    ZipArchiveEntry entry;
    String name;
    File target;
    int nWritten = 0;
    BufferedOutputStream bos;
    byte[] buf = new byte[1024 * 8];
    zis = new ZipArchiveInputStream(is, charsetName, false);
    while ((entry = zis.getNextZipEntry()) != null) {
        name = entry.getName();
        target = new File(destDir, name);
        if (entry.isDirectory()) {
            target.mkdirs();
        } else {
            Util.createParentDirectory(target);
            target.createNewFile();
            bos = new BufferedOutputStream(new FileOutputStream(target));
            while ((nWritten = zis.read(buf)) >= 0) {
                bos.write(buf, 0, nWritten);
            }
            bos.close();
            debug("file : " + name);
        }
    }
    zis.close();
}

他のLIB(Java.util.zip)を使用すると、以下の例外も表示されます。

java.util.zip.ZipException: only DEFLATED entries can have EXT descriptor
    at java.util.zip.ZipInputStream.readLOC(Unknown Source)
    at java.util.zip.ZipInputStream.getNextEntry(Unknown Source)
4

1 に答える 1

8

これは、いわゆる「データ記述子」がこの「mimetype」ファイルに添付されているために発生します。デフォルト (および仕様) では、DEFLATED ファイルのみがこれを持つことが許可されていますが、STORED (ZIP 内のファイルを解凍します) に格納されています。

allowStoredEntriesWithDataDescriptor=true で ZipArchiveInputStream を構築するだけです。

public ZipArchiveInputStream(InputStream inputStream,
                         String encoding,
                         boolean useUnicodeExtraFields,
                         boolean allowStoredEntriesWithDataDescriptor)
于 2014-03-12T09:42:00.523 に答える