HTTPHandler跟踪下载是否已取消?

时间:2013-03-04 05:32:16

标签: c# asp.net download httphandler

我正在尝试跟踪文件下载的次数以及已下载文件的人员。由于无法从File SaveAs对话框中获取任何click事件,我想知道处理程序是否可以实际知道下载是否已取消或用户是否选择下载?

此链接ASP.NET file download - detect if user cancelled download?建议使用另一个确认对话框来完成工作,但我认为这可能不是一种用户友好的方法。

我不排除错误点击下载按钮的可能性,所以我只想知道是否真的有办法知道何时增加下载时间。

更新:

在阅读完毕后,我现在有了这段代码。

    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或更多。

在我看来,在Response.IsClientConnected变为假之前,for循环已经完成。我可以改变什么来使这项工作?任何指针都会非常感激。

1 个答案:

答案 0 :(得分:2)

发送完整回复后检查属性IsClientConnected。如果客户取消或断开连接,它会告诉你。

重要的是,在响应流上调用End之前检查此属性,否则连接将被关闭。

所以基本上归结为:

  • 发送您的数据
  • 验证客户端是否仍然已连接
  • 关闭连接

或者,您可能希望在定期向客户端提供数据时检查此值。

有关详细信息,请参阅MSDN