首页 文章

HTTPHandler跟踪下载是否已取消?

提问于
浏览
1

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

此链接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 变为false之前,for循环已经完成 . 我可以改变什么来使这项工作?非常感谢任何指针 .

1 回答

  • 2

    在发送完整的响应后检查属性 IsClientConnected . 如果客户取消或断开连接,它会告诉你 .

    重要的是在响应流上调用 End 之前检查此属性,否则无论如何都要关闭连接 .

    所以基本上它归结为:

    • 发送您的数据

    • 验证客户端是否仍处于连接状态

    • 关闭连接

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

    有关详细信息,请参阅MSDN .

相关问题