[ブラウザで_ PDFを表示]オプションのチェックを外したときにPDFファイルをブラウザで強制的に開く方法はありますか?
埋め込みタグとiframeを使用してみましたが、それはそのオプションがチェックされている場合にのみ機能します。
私に何ができる?
ファイルをブラウザで表示するようブラウザに指示するには
Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"
ファイルを表示せずにダウンロードするには
Content-Type: application/pdf
Content-Disposition: attachment; filename="filename.pdf"
ファイル名にfilename[1].pdf
などの特殊文字が含まれていると、ファイル名を引用符で囲む必要があります。
HTML5を使用している場合(そして今日では誰もが使っていると思います)、download
という属性があります。
例えば、
<a href="somepathto.pdf" download="filename">
ここでfilename
はオプションですが、指定されている場合は、ダウンロードされたファイルにこの名前が付けられます。
正しいタイプは、application/pdf
ではなく、PDFのapplication/force-download
です。これはいくつかのレガシブラウザにとってハックのように見えます。可能であれば、常に正しいMIMEタイプを使用してください。
サーバーコードを管理している場合
header("Content-Disposition", "attachment; filename=myfilename.myextension");
を使うheader("Content-Disposition", "inline; filename=myfilename.myextension");
を使用してくださいサーバーコードを制御できません。
注:サーバー側でファイル名を設定することをお勧めします。より多くの情報があり、共通のコードを使用できるからです。
Apacheがこれを.htaccess
ファイルに追加している場合:
<FilesMatch "\.(?i:pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
前回の投稿で入力エラーがありました。
header("Content-Type: application/force-download");
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=\"".$name."\";");
ブラウザにユーザーにプロンプトを表示させたくない場合は、3番目の文字列に "attachment"の代わりに "inline"を使用します。インラインはとてもうまくいきます。 PDFは、開くをクリックするようにユーザーに要求せずにすぐに表示されます。私は "添付ファイル"を使用しましたが、これにより、開く、保存するようにユーザーに要求されます。ブラウザの設定を変更してプロンプトが妨げられないようにしました。
これはASP.NET MVC用です
あなたのcshtmlページで:
<section>
<h4><a href="@Url.Action("Download", "Document", new { id = @Model.GUID })"><i class="fa fa-download"></i> @Model.Name</a></h4>
<object data="@Url.Action("View", "Document", new { id = @Model.GUID })" type="application/pdf" width="100%" height="800" class="col-md-12">
<h2>Your browser does not support viewing PDFs, click on the link above to download the document.</h2>
</object>
</section>
あなたのコントローラで:
public ActionResult Download(Guid id)
{
if (id == Guid.Empty)
return null;
var model = GetModel(id);
return File(model.FilePath, "application/pdf", model.FileName);
}
public FileStreamResult View(Guid id)
{
if (id == Guid.Empty)
return null;
var model = GetModel(id);
FileStream fs = new FileStream(model.FilePath, FileMode.Open, FileAccess.Read);
return File(fs, "application/pdf");
}