web-dev-qa-db-ja.com

ファイルをダウンロードせずにブラウザで開くように強制するにはどうすればよいですか。

[ブラウザで_ PDFを表示]オプションのチェックを外したときにPDFファイルをブラウザで強制的に開く方法はありますか?

埋め込みタグとiframeを使用してみましたが、それはそのオプションがチェックされている場合にのみ機能します。

私に何ができる?

178
elloalisboa

ファイルをブラウザで表示するようブラウザに指示するには

Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"

ファイルを表示せずにダウンロードするには

Content-Type: application/pdf
Content-Disposition: attachment; filename="filename.pdf"

ファイル名にfilename[1].pdfなどの特殊文字が含まれていると、ファイル名を引用符で囲む必要があります。

354
ColinM

HTML5を使用している場合(そして今日では誰もが使っていると思います)、downloadという属性があります。

例えば、

<a href="somepathto.pdf" download="filename">

ここでfilenameはオプションですが、指定されている場合は、ダウンロードされたファイルにこの名前が付けられます。

21
Akshay

正しいタイプは、application/pdfではなく、PDFのapplication/force-downloadです。これはいくつかのレガシブラウザにとってハックのように見えます。可能であれば、常に正しいMIMEタイプを使用してください。

サーバーコードを管理している場合

  • 強制ダウンロード/プロンプト:header("Content-Disposition", "attachment; filename=myfilename.myextension");を使う
  • ブラウザはそれを開こうとします:header("Content-Disposition", "inline; filename=myfilename.myextension");を使用してください

サーバーコードを制御できません。

注:サーバー側でファイル名を設定することをお勧めします。より多くの情報があり、共通のコードを使用できるからです。

15

Apacheがこれを.htaccessファイルに追加している場合:

<FilesMatch "\.(?i:pdf)$">
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</FilesMatch>
4
Alex

前回の投稿で入力エラーがありました。

    header("Content-Type: application/force-download");
    header("Content-type: application/pdf");
    header("Content-Disposition: inline; filename=\"".$name."\";");

ブラウザにユーザーにプロンプ​​トを表示させたくない場合は、3番目の文字列に "attachment"の代わりに "inline"を使用します。インラインはとてもうまくいきます。 PDFは、開くをクリックするようにユーザーに要求せずにすぐに表示されます。私は "添付ファイル"を使用しましたが、これにより、開く、保存するようにユーザーに要求されます。ブラウザの設定を変更してプロンプトが妨げられないようにしました。

2
trangsinh1952

これは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");
    }
0
Leon van Wyk