ASP.NET CoreでPDFを強制ダウンロードさせる

提供: MonoBook
2017年10月5日 (木) 05:59時点における162.158.179.205 (トーク)による版
ナビゲーションに移動 検索に移動

Acrobat Readerのプラグインが入ったIE8などの古い環境では、Content-Dispositionを使ってPDFをダウンロードさせようとしてもプラグインで開いてしまう。 そういう場合はContent-Typeに「application/force-download」を指定するとよいらしい。正確にはMIMEタイプに存在しない文字列ならば何でもよいらしい。

    public class HomeController : Controller
    {
        public IActionResult DownloadPDF()
        {
            var file = $"wwwroot/manual.pdf";

            // Content-TypeにMIMEタイプに存在しないものを指定するとブラウザは「選択画面」または「ダウンロード」を実行する。
            // ここでは「application/force-download」としているがMIMEタイプに存在しなければ何でもよい。
            Response.ContentType = "application/force-download";
            Response.Headers.Add("Content-Disposition", "attachment; filename=fileName.pdf");
            Response.Headers.Add("X-Content-Type-Options", "nosniff");

            return File(System.IO.File.ReadAllBytes(file), "application/pdf");
        }
    }