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

时间:2011-09-30 17:39:17

标签: asp.net download

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

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

string sURL = sExternalSequenceFullPath + Session["sFilename"].ToString();
FileInfo fileInfo = new FileInfo(sURL);
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.Flush();
Response.WriteFile(fileInfo.FullName);

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

有没有办法知道用户是否取消了?如果他们确实取消了,我不想计算下载对他们。

如果没有,是否还有另一种方法[不向客户机器添加内容]。

5 个答案:

答案 0 :(得分:3)

我无法知道这可以做到。我会向用户显示一个对话框,该对话框将调用您的下载代码。如果他们在对话框中选择“是”,我会认为这是针对他们的。

另一种选择是编写一个插件(Silverlight,Flash等),以便你可以控制。

答案 1 :(得分:2)

不确定它是否仍然有用,但我有相同的代码来管理下载,除了我的包装在try..catch块中,因为在我的网站的引用程序集中需要抛出异常,直到我的全局错误处理程序。

当用户取消下载时,我得到一个'远程主机关闭连接'。例外,我进入我的捕获块。

我可能会离开标记(我只编写了一年:))但也许它可能就像减少catch块中的下载计数一样简单?

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可以使用套接字并使用HTTP协议(或FTP但仍需要使用UserName和Password访问)下载文件。如果您确实使用了套接字,则用户将不会显示浏览器的下载窗口。这可能会使用户不信任您的网站。我不认为通过使用浏览器的下载对话框可以实现,我会继续检查这个线程但是看它是否可能。 Check this out找到一些Socket编程示例。祝你好运。

Hanlet

编辑:我刚发现This检查出来,也许它可能对你有帮助。

答案 4 :(得分:0)

这个怎么样:

Response.BufferOutput = false;
Response.TransmitFile(fileInfo.FullName);
//increment download count

如果禁用响应输出缓冲,则它将不会移动到将文件发送到客户端的代码行,直到客户端完成接收,因此您可以安全地增加下一行代码中的下载计数。正如SamV在他的回答中所说,如果他们取消下载,即使它中途也会抛出一个HttpException,因此增量下载计数代码无法运行。

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