2009-11-26 3 views
7

私のプロジェクトサイトで、リンクをクリックすると、新しいまたは親のウィンドウにPDFが開きます。さて、ボックスを表示して、ファイルを開くのではなくダウンロードするようにします。開かずにPDFファイルをダウンロードするようにユーザに促す

すべてのブラウザで、これを行う簡単なJavaScript onClickイベントを知っている人は誰ですか?

私のサーバーは、PHPベースです。

答えて

13

、ここではPHPで同じことを行う方法は次のとおりです。

<?php 
header('Content-type: application/pdf'); 
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 
readfile('original.pdf'); 
?> 
+0

私はサイト上のすべてのpdfについてこの問題を有効にしたいと思います。特定のpdf用ではありません –

+0

おかげです。 – foxybagga

+1

ファイルのサイズを含めると便利です。そうでない場合は、ダウンロードするサイズ/時間について「不明」と表示される可能性があります。 'header( 'Content-Length:12345');' –

9

、私はこれはあなたの最善の解決策だと思います:

Response.ClearContent(); 
Response.ClearHeaders(); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("Content-Disposition", "attachment;filename=download.pdf"); 
Response.WriteFile(Server.MapPath("~/files/myFile.pdf")); 
Response.Flush(); 
Response.Close(); 
3

Content-Typeをapplication/octet-streamに変更します。しかし、一部のブラウザでは、お気に入りのPDFビューアでPDFとして開く必要があるファイル拡張子から推測することがあります。

Response.ContentType = "application/octet-stream"; 

はまた、次のように設定します。あなたがPHPを使用している、あなたの編集状態以来

Response.AppendHeader("content-disposition", "attachment; filename=" + name); 
+0

私はサイト上のすべてのpdfを必要とします –

0

あなたがいる場合破損したファイルエラーが発生しました:

header('Pragma: public'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Cache-Control: private', false); 
header('Content-Type: application/pdf'); 
header('Content-disposition: attachment; filename=' . basename($file)); 
header("Content-Transfer-Encoding: binary"); 
header('Content-Length: ' . filesize($file)); // provide file size 
header('Connection: close'); 
readfile($file); 

ここで、$fileはフルのパスまたはファイルのです。