このページに書いてあること。
Javaアプリの開発で、PDFを操作する機会があったのですが、HTTPのレスポンスにPDFをセットすると勝手にダウンロードしてしまい、プレビュー表示ができなかったので解決策のメモ
- 発生した問題
- 解決方法
背景:
Jasper Reportというライブラリを使ってPDFをJava内で生成、HTTPのレスポンスとして返却という仕組みを作っていたのですが、ブラウザでURLにアクセスすると必ずダウンロードされてしまいます。期待する動作は、一旦ブラウザのプレビューで見たいというものです。
Edgeで試しました。非常に単純な話です。
HTTPのレスポンスタイプに指定する情報が誤っていただけでした。
修正前:
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + "sample.pdf");
この記述では、ブラウザの判断は、application/octet-streamにより「なんのファイルかわからないけどよろしく!」という意味になります。Edgeなどはたいていダウンロードするようです。
また、Content-Disposition:attachment; filename=sample.pdfにより、「sample.pdfの名前で保存してね!」という意味なります。
なるほど。
以下のように直すことで、プレビューできるようになりました。
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline");
このあたりの情報は、以下のサイト様で確認することができました。
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Disposition