「ASP.NET CoreでPDFを強制ダウンロードさせる」の版間の差分
編集の要約なし |
imported>Administrator 細 Administrator がページ「ASP.NET Core/PDFを強制ダウンロードさせる」を「ASP.NET CoreでPDFを強制ダウンロードさせる」に移動しました |
||
| (他の1人の利用者による、間の1版が非表示) | |||
| 3行目: | 3行目: | ||
<source lang="csharp"> | <source lang="csharp"> | ||
public class HomeController : Controller | |||
{ | |||
public IActionResult DownloadPDF() | public IActionResult DownloadPDF() | ||
{ | { | ||
| 15行目: | 17行目: | ||
return File(System.IO.File.ReadAllBytes(file), "application/pdf"); | return File(System.IO.File.ReadAllBytes(file), "application/pdf"); | ||
} | } | ||
} | |||
</source> | </source> | ||
[[category: ASP.NET Core]] | [[category: ASP.NET Core]] | ||
2018年10月2日 (火) 11:21時点における最新版
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");
}
}