アンドロイドで特定条件だとPDFファイルが開けなかった件について
現象
かなり限定的な状況ですが
- アンドロイドデフォルトのブラウザを使用
- 日本語ファイル名のPDFをダウンロードして開く
- 開くのはアンドロイドデフォルトのPDFリーダー
- ヘッダーの「Content-Type」が「application/octet-stream」
以上の条件が集まるとなんとPDFが開けないという問題が発生!
「ファイルを開くことができません」などと言われる・・・。
とりあえず該当の箇所は、CakePHP1.3のMediaViewを利用してダウンロード。
検証
- ファイル名を半角英数に変更
> 開ける・・・
- app/webrootにおいて直接ダウンロード
> 開ける・・・
- iphone
> 開ける・・・
- アンドロイドのAdobeReaderで開いてみる
> 開ける・・・
という訳で
Live HTTP Headersで監視して、ヘッダーが「application/octet-stream」なことが変だなーとずっと思って
- ヘッダーを無理やり「Content-Type」を「application/pdf」に設定
> 開けた!
原因
CakePHP1.3のMediaViewですが、この辺にずばり今回の問題が!
・・・'download' => true
だと問答無用で「application/octet-stream」かよ・・・
CakePHP2はソースを追ってませんが、こんな動作せずにちゃんとアンドロイドで開けたので多分だいじぶ・・・。
社内で
_人人人人人人人_
> CakePHP1.3 <
 ̄Y^Y^Y^Y^Y^Y ̄
とか言われて悲しくなったけど強く生きる。
まとめ
ファイルダウンロード時のContent-Typeはちゃんと指定しましょう!(当たり前)