0

私はreadfile();ダウンロードを開始するために使用していますが、それは完全に正常に機能しますが、JavaScriptを使用してユーザーがファイルをダウンロードできるかどうかを確認しようとすると、ダウンロードが開始されず、代わりにファイルのバイナリコードが表示されます。ファイルをダウンロードしてほしい。

これを使用して、ユーザーがファイルをダウンロードできるかどうかを確認します。

http.open("GET", "includes/checkdownload.php", true);

checkdownload.php私はこれを持っています

header('Cache-Control: public');
header('Content-Transfer-Encoding: binary');
header("Content-Type: application/pdf");
header('Content-Disposition: attachment; filename="file.pdf"');
ob_clean();
flush();
readfile("file.pdf"); 
4

2 に答える 2

3

Ajaxリクエストでダウンロードを開始することはできません。Ajaxリクエストでファイルの可用性を確認できます(すべてをダウンロードしないように、大きなファイルにはおそらくHEADを使用する必要があります)が、window.open実際にファイルの保存ダイアログを開くにはを使用する必要があります。

window.open('includes/checkdownload.php');

または、@ Derekが指摘しているように、を使用する<iframe>か、を設定してリダイレクトするかwindow.location.href、またはを使用することもできますwindow.showModalDialog。ブラウザのどこかでそのURLを開くもの。

于 2012-06-21T19:22:17.913 に答える
0

ファイルが有効かどうかを通知するプロキシスクリプトが必要になります。したがって、ファイルに対してhttp.openを実行する代わりに、サーバー上でスクリプトを呼び出して、ファイルをダウンロードできるかどうかにかかわらず、アサーションを返します。

例えば:

$.get('includes/candownload.php', function(data){ 
    if(data == 'ok'){
        window.location.href = "includes/checkdownload.php";
    }else{
        alert('Cannot download your file');
    }
)

そしてあなたのphpファイル「candownload.php」で

header('Cache-Control: public');
header('Content-Transfer-Encoding: binary');
header("Content-Type: text/plain");
ob_clean();
flush();
if(file_exists("file.pdf")){ echo 'ok'; }else{ echo 'no'; }
于 2012-06-21T19:22:46.213 に答える