一千萬個為什麽

搜索

mimetype文件有一個長度為n的額外字段。 mimetype文件不允許使用ZIP格式的額外字段功能



我正在使用C#庫DotNetZip(Ionic.Zip和Ionic.Zlib)從目錄生成電子書。目錄如下所示:

BookName
|
|___content/
|       images/
|       css/
|       (html pages, .ops, .ncx)
|
|___META-INF/
|       container.xml
|
|___mimetype

生成存檔的代碼如下所示:

using (ZipFile zip = new ZipFile(pathTemp + ".epub"))
{
    zip.RemoveSelectedEntries("*.*");
    zip.AddFile(mimetype, "").CompressionLevel = CompressionLevel.None;
    zip.AddDirectory(pathTemp + "\\content", "content");
    zip.AddDirectory(pathTemp + "\\META-INF", "META-INF");
    zip.Save();
}

當我通過 EPUB驗證器運行它時,會引發此錯誤:

mimetype文件有一個長度為36的額外字段。對於mimetype文件,不允許使用ZIP格式的額外字段功能。

我沒有壓縮mimetype文件,所以我不知道發生了什麽。

UPDATE: This problem has been solved; see the solution here.

轉載註明原文: mimetype文件有一個長度為n的額外字段。 mimetype文件不允許使用ZIP格式的額外字段功能

一共有 2 個回答:

我負責嘗試改善此錯誤消息,請參閱 https://github.com/IDPF/epubcheck/pull/497 了解詳情。本質上你的Zip打包器會將一些應用程序或操作系統特定的東西放到文件中,這會打破EPUB mimetype魔術數字支持。

我也有壓縮mimetype文件的一些問題。我最終做的是從一個字節[]中自己添加條目。

using (ZipOutputStream zs = new ZipOutputStream(pathTemp + ".epub"))
 {
  var o = zs.PutNextEntry("mimetype");
  o.CompressionLevel = CompressionLevel.None;
  byte[] mimetype  = System.Text.Encoding.ASCII.GetBytes("application/epub+zip");
  zs.Write(mimetype, 0, mimetype.Length);
 }

using (ZipFile zip = new ZipFile(pathTemp + ".epub"))
 {
  zip.RemoveSelectedEntries("*.*");
  zip.AddDirectory(pathTemp + "\\content", "content");
  zip.AddDirectory(pathTemp + "\\META-INF", "META-INF");
  zip.Save();
 }

這應該為你解決它。