4

ダウンロードの準備ができたファイルに関するブラウザ イベントが発生したことを知る方法はありますか? ファイルを生成するスクリプトがあり、それが起こっている間、laoding gif を表示します。次のメッセージが表示されたら: http://i.stack.imgur.com/CmZHE.png (ファイルのダウンロード準備完了、スクリプトの終了) gif を停止したいと思います。

JSでこれを知ることは可能ですか?ajax の使用はオプションですが、システムで複数の変更が必要になるため、時間がかかります。

ありがとう!

4

2 に答える 2

2

私はこの例に従ってそれを行いました: http://geekswithblogs.net/GruffCode/archive/2010/10/28/detecting-the-file-download-dialog-in-the-browser.aspx

PHP の場合、次のように Cookie を送信することに注意してください。

header('Content-type: application/octet-stream');
header('Set-Cookie: fileDownload=1; path=/');
header('Content-Disposition: attachment; filename='.$filename);

上記のパスは非常に重要です。次に、JS は、次のように、Cookie を削除するためのパスも必要です。

$.removeCookie('fileDownload', { path: '/' })
于 2013-08-06T15:15:15.743 に答える
0

私は同じ問題を抱えていて、2 つのステップで解決策を選択しました。

これは、ダウンロードを開始する準備が整うまでファイルを準備している間、spinner.gif および/または待機メッセージを表示および非表示にするための優れたソリューションだと思います。

  1. ?cmd=prepare最初に、jQuery を使用してアンカーを変更し、uri にajax を追加してダウンロード関数を呼び出します。これにより、サーバー側で PDF が準備され、クライアントが到達可能なフォルダー (domain.ext/documents/my_pdf_name.pdf など) に保存されます。

HTML (ブートストラップ 3) :

<a href="/search/download" class="btn btn-primary pull-left download">
    <i class="fa fa-file-pdf-o"></i> Download result in PDF
</a>

jQuery :

$(function() {
    $('.download').on('click', function(e) {
        e.preventDefault();
        $('.loading').show();
        url = $('.download').attr('href') + '?cmd=prepare';
        $.ajax({
            url: url,
            type: 'get',
            success: function(filename) {
                console.log(data);
                window.location = filename;
                $('.loading').hide();
            }
        });
    });
});  

PHP サーバー側:

// ajax call
if(addslashes($_GET["cmd"]) == "prepare") {
    echo create_pdf($_SESSION["search"], $out="prepare");
    die();    
}
  1. ファイルの準備ができると、関数create_pdf()はファイル名をクライアントに返し、ajax クエリの成功関数でwindow.location = filename、「ウィンドウとして保存」を表示する a を呼び出します。

サーバーサイドでのドキュメント作成はajaxで呼び出しますが、ダウンロードはそうではありません!

  1. このソリューションの結果として生じる問題は、サーバーに保持したくないファイルのストレージです。そのため、bash スクリプトを使用して x 時間より古いファイルを削除できます。たとえば、https://stackoverflow.com/a/249591/2282880
于 2017-02-14T20:27:12.010 に答える