Edited at

epub用のzipファイルを正しく作成する


問題


  • Mimetype file entry is missing or is not the first file in the archive.

  • bookwalkerにepubを入稿しようとしたら上のようなエラーが出た


解決


  • windowsとかで普通にzip圧縮するとエラーが出る

  • このようなコマンドでepub(zipファイル)を作成する1

zip -0 -X hoge.epub mimetype

zip -r hoge.epub META-INF item


  • 残念ながらwindowsのzipフォルダー機能では上記を再現することはできなかった2


どうしてこんなことに?


  • epubの構造(というか仕様)にある

  • epubファイル(中身はzipファイル)のバイナリの先頭にはmimetypeファイルがなければならない


普通にzip圧縮するとどうなる?


  • extra file attributesが付与されると3

  • 仕様で決められているバイナリ先頭に現れるはずのmimetypeの位置がずれる

  • そんでmimetypeファイル無いじゃん、このファイルは不適といってエラーが出る

  • windowsの標準のzip圧縮で追加圧縮してもmimetypeファイルの圧縮順序がずれるので不適となる


バイナリ


  • 正しいバイナリ

image.png

image.png


参考


ここに至るまでの話





  1. bash on Ubuntu on Windows 10環境にて実施 



  2. lhazでも追加圧縮で試してみたけどうまくいかない 



  3. 上のコマンドで -X しているのはこのextra file attributesの付与を抑制する