【问题标题】:ASP.NET file download - detect if user cancelled download?ASP.NET 文件下载 - 检测用户是否取消下载?
【发布时间】:2011-09-30 17:39:17
【问题描述】:

我有一个 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);

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

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

如果没有,还有其他方法可以[不向客户端机器添加任何内容]。

【问题讨论】:

  • 一些横向思考:将下载限制在一个时间范围内,而不是一个数字?下载文件后,他们无论如何都可以制作 n 份副本...
  • @Michael:也许吧。我们正在尝试限制使用的带宽量。
  • SO 社区:谢谢大家的回答!在我看来,未来需要有一种方法让回调通知用户采取了哪些操作(保存、取消等)。

标签: asp.net download


【解决方案1】:

据我所知,这是不可能做到的。我会向用户展示一个对话框,该对话框会调用您的下载代码。如果他们在对话框中选择“是”,我会认为这对他们不利。

另一种选择是编写一个插件(Silverlight、Flash...等),以便您拥有控制权。

【讨论】:

    【解决方案2】:

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

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

    我可能有点离题(我只编码了一年:))但也许它可以像减少捕获块中的下载计数一样简单?

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我相信 OP 指的是浏览器的受控取消按钮,他无法控制。
      • 哦,你的意思是取消文件对话框?然后我误解了这个问题,对不起。
      • @Dennis:是的,你是对的。浏览器控制的取消按钮。如果将来在按下(或按下)时有一些通知,那将非常有用。
      【解决方案4】:

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

      汉莱特

      编辑:我刚刚找到 This 看看,也许它可以帮助你。

      【讨论】:

        【解决方案5】:

        这个怎么样:

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

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

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

        【讨论】:

        • 其他人可以验证这个作品,或者评论它是否有效吗?这是一个有趣的答案,我很好奇(但我不能再碰这段代码了)
        猜你喜欢
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-02
        • 2011-06-21
        相关资源
        最近更新 更多