3

を返すコントローラー アクション メソッドがあるとしますFileResult。ファイルが実際にクライアントに完全にダウンロードされたかどうかを検出することは可能ですか?

public ActionResult GetFile(int id)
{
    DownloadInfo data = provider.GetInfo(id);
    this.provider.MarkDownloadStart(id);

    return File(Server.MapPath(data.Filename), "application/pdf");
}

アクションが呼び出されたときに情報を保存しますが、それは誰かがダウンロードを開始したことを意味するだけです。ダウンロードが完了したかどうか、サーバーに関する情報はありません...

また、コンテンツ処理ヘッダーを設定して、ファイルがブラウザーで直接開かれることはないと思われますが、ブラウザーはファイルを開く/保存するように求めます。これにより、クライアントがファイルを保存しやすくなります...

私の考え

ダウンロードが実際に行われたことを直接検出することはできないと思います。しかし、どういうわけか他の方法でそれを行うことは可能ですか:

  1. ビューをロードする
  2. それを持ってiframeいます
  3. ファイルを要求し、
  4. メインビューは、クライアントにアクセスできるため、クライアントでのダウンロードを監視iframeし、ファイルのダウンロードが完了したかどうかを確認します。

上のシナリオは実行可能に見えるかもしれませんが、実際にこの監視を行う方法がわかりません。たぶん、このタスクを実行するための他の - より良い - 方法があります。

主な質問は

クライアントがファイルのダウンロードを完全に終了し、ダウンロードの合間にキャンセルしていないことをサーバー上で検出することは可能ですか?

4

2 に答える 2

2

クッキーを使用できます。ここに例があります。プロセスに含まれる手順の一部を次に示します。

  1. クライアントで一意の ID を生成します。
  2. この一意の ID を渡して、ダウンロード アクションに要求を送信します。
  3. a を使用しwindow.setIntervalて、定期的に Cookie の存在を照会し、その値を確認します。
  4. Cookie が作成され、その値が一意の ID の値と一致する場合、ダウンロードは完了しています。

そして、サーバーで、応答へのファイルのストリーミングが終了したら、Cookie の値を一意の ID に設定します。

于 2012-04-07T09:40:28.723 に答える
-2

こちらのURLにアクセスしてください

http://odetocode.com/blogs/scott/archive/2010/06/23/checking-client-download-success-with-asp-net-mvc.aspx

これがあなたに役立つことを願っています

于 2013-09-24T08:25:21.620 に答える