195

ウェブサイトに大きなサイズの PDF カタログがいくつかあり、これらをダウンロードとしてリンクする必要があります。ググってみたところ、以下のようなものを見つけました。リンクをクリックすると、「名前を付けて保存...」ポップアップが開きます...

 <head>
    <meta name="content-disposition" content="inline; filename=filename.pdf">
    ...

しかし、それは機能しません:/ 以下のようにファイルにリンクすると、ファイルにリンクするだけで、ファイルを開こうとします。

    <a href="filename.pdf" title="Filie Name">File name</a>

更新(以下の回答による):

ご覧のとおり、これには 100% 信頼できるクロスブラウザー ソリューションはありません。おそらく最良の方法は、以下にリストされている Web サービスのいずれかを使用し、ダウンロード リンクを提供することです...

4

19 に答える 19

288

リンクをクリックした後、ブラウザにファイルを保存するように強制するへの回答から:

<a href="path/to/file" download>Click here to download</a>
于 2013-06-24T16:10:57.673 に答える
90

属性を使用しdownloadますが、コードと同じオリジンでホストされているファイルに対してのみ機能することを考慮してください。これは、ユーザーが元のサイトの同じホストからのファイルのみをダウンロードできることを意味します。

元のファイル名でダウンロード:

<a href="file link" download target="_blank">Click here to download</a>

ファイル名として「some_name」を使用してダウンロードします。

<a href="file link" download="some_name" target="_blank">Click here to download</a>

追加すると、実際のタブの代わりに新しいタブが使用され、一部のシナリオでは属性target="_blank"の適切な動作にも貢献します。download

same-origin policy と同じルールに従います。このポリシーの詳細については、MDN Web Doc 同一生成元ポリシーページを参照してください。

MDN Web Doc アンカーの属性ページで、このダウンロード HTML5 属性について詳しく知ることができます。

于 2014-02-03T12:50:49.670 に答える
35

メタ タグは、この結果を達成するための信頼できる方法ではありません。通常、これを行うべきではありません。提供するコンテンツをどうするかを決定するのは、ユーザー/ユーザー エージェントに任せるべきです。ユーザーは、必要に応じていつでもブラウザにファイルをダウンロードさせることができます。

それでもブラウザにファイルをダウンロードさせたい場合は、HTTP ヘッダーを直接変更します。PHP コードの例を次に示します。

$path = "path/to/file.pdf";
$filename = "file.pdf";
header('Content-Transfer-Encoding: binary');  // For Gecko browsers mainly
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($path)) . ' GMT');
header('Accept-Ranges: bytes');  // Allow support for download resume
header('Content-Length: ' . filesize($path));  // File size
header('Content-Encoding: none');
header('Content-Type: application/pdf');  // Change the mime type if the file is not PDF
header('Content-Disposition: attachment; filename=' . $filename);  // Make the browser display the Save As dialog
readfile($path);  // This is necessary in order to get it to actually download the file, otherwise it will be 0Kb

これは HTTP プロトコルの単なる拡張であることに注意してください。とにかく無視するブラウザもあります。

于 2010-09-27T09:45:30.923 に答える
24

私はこれと同じ問題を抱えていて、これまでうまく機能した解決策を見つけました。次のコードを.htaccessファイルに入れます。

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

これは、ブラウザに表示する代わりにファイルを強制的にダウンロードすることから来ました。

于 2013-10-17T01:34:27.187 に答える
11

Firefox の非常に単純な解決策を見つけました (直接の href ではなく相対でのみ機能します): add type="application/octet-stream":

<a href="./file.pdf" id='example' type="application/octet-stream">Example</a>
于 2013-01-30T23:52:20.373 に答える
7

この行を .htaccess ファイルに追加してみてください。

AddType application/octet-stream .pdf

ブラウザに依存しないのでうまくいくと思います。

于 2015-04-01T12:10:57.350 に答える
7

一般的に、一部のブラウザー設定またはプラグインは、単純な Web ページのように同じウィンドウで PDF を直接開くために発生します。

以下が役立つかもしれません。私は数年前にPHPでそれを行いました。しかし、現在、私はそのプラットフォームに取り組んでいません。

<?php
    if (isset($_GET['file'])) {
        $file = $_GET['file'];
        if (file_exists($file) && is_readable($file) && preg_match('/\.pdf$/',$file)) {
            header('Content-type: application/pdf');
            header("Content-Disposition: attachment; filename=\"$file\"");
            readfile($file);
        }
    }
    else {
        header("HTTP/1.0 404 Not Found");
        echo "<h1>Error 404: File Not Found: <br /><em>$file</em></h1>";
    }
?>

上記をdownload.phpとして保存します。

この小さなスニペットを PHP ファイルとしてサーバー上のどこかに保存すると、それを使用して、直接表示するのではなく、ブラウザーでファイルをダウンロードできます。PDF 以外のファイルを提供する場合は、5 行目を削除または編集します。

次のように使用できます。

次のリンクを HTML ファイルに追加します。

<a href="download.php?file=my_pdf_file.pdf">Download the cool PDF.</a>

参考元:当ブログ

于 2010-09-27T09:42:14.673 に答える
5

外部のダウンロード サイトを使用したり、ヘッダーを変更したりせずにこれを実現するための非常に簡単な方法は、PDF を含む ZIP ファイルを作成し、その ZIP ファイルに直接リンクすることです。これにより、常に [保存/開く] ダイアログがトリガーされ、.zip に関連付けられたプログラムが起動される PDF ウィンドウをダブルクリックすることは依然として簡単です。

ところで、私も答えを探していました。ブラウザに埋め込まれた PDF プラグインのほとんどは、何かを表示するのに非常に時間がかかるためです (PDF の読み込み中にブラウザがハングすることがよくあります)。

于 2010-11-12T03:53:31.617 に答える
5

.htaccess以下のコードをファイルに入れるだけです。

AddType application/octet-stream .csv
AddType application/octet-stream .xls
AddType application/octet-stream .doc
AddType application/octet-stream .avi
AddType application/octet-stream .mpg
AddType application/octet-stream .mov
AddType application/octet-stream .pdf

または、JavaScriptでトリックを行うこともできます

element.setAttribute( 'download', whatever_string_you_want);
于 2016-03-04T19:10:45.017 に答える
2

ページ上の単一のリンクのダウンロードを強制する必要がある場合、これを行う非常に簡単な方法は、href-link で HTML5 ダウンロード属性を使用することです。

参照: http://davidwalsh.name/download-attribute

これにより、ユーザーがダウンロードするファイルの名前を変更し、同時にダウンロードを強制できます。

これが良い方法であるかどうかについては議論がありましたが、私の場合、PDF ファイル用の埋め込みビューアーがあり、ビューアーはダウンロード リンクを提供しないため、個別に提供する必要があります。ここで、ユーザーが PDF を Web ブラウザーで開かないようにする必要があります。これは混乱を招きます。

これにより、名前を付けて保存ダイアログを開く必要はありませんが、事前に設定されたダウンロード先にリンクが直接ダウンロードされます。もちろん、あなたが他の誰かのためにサイトを運営していて、リンクに属性を手動で書き込む必要がある場合は、おそらく悪い考えですが、リンクに属性を取得する方法がある場合、これは軽い解決策になる可能性があります.

于 2015-03-02T13:05:54.603 に答える
0

PDFファイルを開く方法を知っているブラウザ内にプラグインがある場合、それは直接開きます。画像や HTML コンテンツの場合と同様です。

したがって、別のアプローチは、応答で MIME タイプを送信しないことです。このように、ブラウザはどのプラグインを開けばよいかわかりません。したがって、 [保存/開く] ダイアログ ボックスが表示されます。

于 2010-09-27T09:37:08.100 に答える
-2

大きな PDF ファイルを使用すると、ブラウザーがハングします。Mozilla では、メニューツールオプションアプリケーションの次に、コンテンツ タイプ Adob​​e Acrobat ドキュメントの横にあります。[Action] ドロップダウンで、[ Always ask]を選択します。

これは私にはうまくいきませんでした。

メニュー ツール* →アドオンAdob​​e Acrobat (Firefox 用 Adob​​e PDF プラグイン) → 無効にします。電子書籍をダウンロードできるようになりました!

于 2012-07-02T17:59:04.357 に答える