Apache Tika があばずれに育ってて泣いた
我がプロジェクトでは Apache Tika というライブラリを利用している。
このチカちゃんは、ファイルの中身や名前を元に MimeType を判定してくれたり、ファイル内からテキスト部分だけを抽出してくれたりとなかなか優れたライブラリ、だった。
今まで使用していた Tika のバージョンは 1.1。現在の最新版は 1.4 なのでよっこらセックスと一声上げてバージョンアップを試みたところ、今まで出来ていたファイルの判定ができなくなっていた。いずれも、ファイル名の情報は無しで、純粋にコンテンツから MimeType を判断してもらった場合である。
具体的には、MimeType 判定部分で、下記二点の問題が発生した。
1) UTF-8 以外のテキストファイルの MimeType が "application/octet-stream" になる
2) encoding が UTF-8 以外の XML ファイルの MimeType が "text/plain" になる
ではそれぞれ見ていこう。
UTF-8 以外のテキストファイルが "application/octet-stream" と判定される
今までは Shift-JIS や EUC-JP で書いたテキストファイルもチカちゃんに食べさせれば text/plain だと判定してくれた。けなげな娘である。
それがすっかりあばずれに育ってしまい、「あたしゃ UTF-8 以外は食えねえんだっつってんだろ!」と強気で豪気な娘になってしまった。
結果チカちゃんは UTF-8 以外のテキストファイルについては text/plain ではなく application/octet-stream として判断してしまう。
閉じた世界(ユーザーからの入力が少ない、または限定的)ならばこの仕様でも良い。その閉じた世界の中を全て UTF-8 にしてしまえば良いからだ。残念ながら今回の用途は Web 用途なので、ユーザーの入力がありまくるのである。単なる Shift-JIS のテキストファイルを返すのに、Content-Type が application/octet-stream だなんてブラウザに申し訳が立たない。