1

ファイルがダウンロードされた回数と、誰がダウンロードしたかを追跡しようとしています。[名前を付けて保存] ダイアログ ボックスからクリック イベントを取得する方法がないため、ダウンロードがキャンセルされたか、ユーザーがダウンロードを選択したかをハンドラーが実際に認識できるかどうかを知りたいですか?

このリンクASP.NET ファイルのダウンロード - ユーザーがダウンロードをキャンセルしたかどうかを検出しますか? 仕事を終わらせるために別の確認ダイアログボックスを用意することを提案しましたが、これはユーザーフレンドリーな種類のアプローチではないかもしれないと思います.

ダウンロード ボタンを誤ってクリックする可能性を排除しているわけではないので、ダウンロード時間を増やすタイミングを知る方法が本当にあるかどうかを知りたいだけです。

アップデート:

いくつか読んだ後、私は今このコードを持っています。

    int maxCount = (int)Math.Ceiling((file.Length - startBytes + 0.0) / 1024);

    int i;
    for (i = 0; i < maxCount && context.Response.IsClientConnected; i++)
    {
        context.Response.BinaryWrite(_BinaryReader.ReadBytes(1024));
        context.Response.Flush();
    }

    if (i < maxCount)
    { }
    else
    {
        //Update Increment
    }

ユーザーが実際にダウンロードしない場合はインクリメントを更新しないように、キャンセルイベントを通知しようとしています。しかし、キャンセルを押したにもかかわらず、インクリメントがまだ更新されていることに気付きました。このダウンロードに含まれるファイルは小さく、約 100kb 以上です。

私の意見では、for ループはResponse.IsClientConnectedfalse になる前に既に実行されています。これを機能させるために何を変更できますか? どんなポインタでも大歓迎です。

4

1 に答える 1

2

IsClientConnected応答全体を送信した後、プロパティを確認してください。その間にクライアントがキャンセルまたは切断された場合は、その旨が通知されます。

重要なことは、応答ストリームを呼び出す前にこのプロパティを確認することEndです。そうしないと、とにかく接続が閉じられます。

したがって、基本的には次のようになります。

  • データを送信する
  • クライアントがまだ接続されていることを確認する
  • 接続を閉じる

必要に応じて、定期的にデータをクライアントに配信している間でも、この値を確認したい場合があります。

詳細については、 MSDNを参照してください。

于 2013-03-04T05:40:26.727 に答える