ASP.NET文件下载-检测用户是否取消下载?

ASP.NET文件下载-检测用户是否取消下载?,asp.net,download,Asp.net,Download,我有一个ASP.NET应用程序,允许用户从我的web服务器下载文件。 我跟踪下载,只允许下载这么多文件 我有以下代码为我的用户调用下载(单击按钮): 我的问题是浏览器向用户提供了下载(保存/另存为)或取消的功能 有没有办法知道用户是否取消了?如果他们真的取消了,我不想把下载数算在他们的账上 如果没有,是否有其他方法来处理[不向客户机添加内容]。您是否尝试过处理取消按钮的单击事件?据我所知,这是无法做到的。我将向用户提供一个对话框,该对话框将调用您的下载代码。如果他们在对话框中选择“是”,我会将其

我有一个ASP.NET应用程序,允许用户从我的web服务器下载文件。 我跟踪下载,只允许下载这么多文件

我有以下代码为我的用户调用下载(单击按钮):

我的问题是浏览器向用户提供了下载(保存/另存为)或取消的功能

有没有办法知道用户是否取消了?如果他们真的取消了,我不想把下载数算在他们的账上


如果没有,是否有其他方法来处理[不向客户机添加内容]。

您是否尝试过处理取消按钮的单击事件?

据我所知,这是无法做到的。我将向用户提供一个对话框,该对话框将调用您的下载代码。如果他们在对话框中选择“是”,我会将其与他们相提并论


另一个选项是编写插件(Silverlight、Flash…等),以便您可以控制。

您可以使用套接字并使用HTTP协议(或FTP)下载文件,但仍需要使用用户名和密码进行访问。如果您确实使用了套接字,则不会在浏览器的下载窗口中显示用户。这可能会使用户不信任您的站点。我认为使用浏览器的下载对话框是不可能实现的,但是我会继续检查这个线程,看看是否有可能。查找一些套接字编程示例。祝你在这项任务上好运

汉利特


编辑:我刚刚找到了它,也许它会对你有所帮助。

我不确定它是否仍然有用,但我有几乎相同的代码来管理下载,只是我的代码被包装在一个try..catch块中,因为它位于我的站点的引用程序集中,并且需要将异常抛出到我的全局错误处理程序中

当用户取消下载时,我会收到一个“远程主机关闭了连接”异常,我会进入catch块

我可能有点不对劲(我只编写了一年代码:),但可能很简单,比如减少catch块中的下载计数?

这个怎么样:

Response.BufferOutput = false;
Response.TransmitFile(fileInfo.FullName);
//increment download count
如果禁用响应输出缓冲,则在客户端完成接收文件之前,它不会超过将文件发送到客户端的代码行,因此可以在下一行代码中安全地增加下载计数。正如SamV在他的回答中所说,如果他们中途取消下载,就会抛出HttpException,因此增量下载计数代码不会运行


我还建议使用TransmitFile方法而不是WriteFile方法,因为它不会将整个文件加载到内存中,从而浪费服务器资源。

我认为OP指的是浏览器的受控取消按钮,他无法控制该按钮。哦,你的意思是取消文件对话框?然后我误解了这个问题,对不起。@Dennis:是的,你是对的。浏览器控制的取消按钮。如果将来在按下时(或按下哪个按钮时)有一些通知,这将是非常有用的。有些人会横向思考:将下载限制在一个时间范围内,而不是一个数字?一旦下载了一个文件,他们就可以复制n份了…@迈克尔:也许吧。我们正试图限制带宽的使用量。所以社区:谢谢大家的回答!在我看来,将来需要有一种方法让回调通知用户采取了什么操作(saveas、cancel等)。其他人是否可以验证这一方法是否有效,或者评论它是否有效?这是一个有趣的答案,我很好奇(但我再也摸不到这个代码了)
Response.BufferOutput = false;
Response.TransmitFile(fileInfo.FullName);
//increment download count