ブラウザにファイルを強制ダウンロードさせるContent-Type

  • 47
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

ブラウザでリンクを開くと自動的にファイルダウンロードを開始させる方法。レスポンスヘッダのContent-Typeにapplication/force-downloadを指定しておくと、ファイル形式に関係なくダウンロードを開始させられる。

例えば、 http://[ドメイン]/downloadpdf にアクセスが来るとPDFファイルをダウンロードさせたい時のコード。

PDFファイルを返すController
@RequestMapping(value = "/downloadpdf", method = RequestMethod.GET)
public void downloadPdf(HttpServletResponse response) throws Exception {

     response.setContentType("application/pdf");

     InputStream in = new FileInputStream(
          new File("/Users/horimislime/Desktop/sample.pdf"));
     OutputStream out = response.getOutputStream();

     IOUtils.copy(in, out); //PDFファイルをレスポンスで返す
}

ChromeなどPDFのインライン表示をサポートしているブラウザでは、/downloadpdfを開くとファイルをダウンロードせずブラウザ上に表示してしまう。以下のようにContent-Typeを指定するとダウンロードを強制させられる。

 
response.setContentType("application/force-download");