c# - 如何使用 ashx 处理程序识别下载是否完成

标签 c# asp.net download httphandler ashx

在我们的一个项目中,我们需要将文件从服务器下载到客户端位置的功能。

为此,我们使用 ashx 处理程序来执行操作。它运行良好,我们可以下载文件。

现在我们需要一个要求,比如我们需要在下载开始和完成时更新字段。有什么办法可以做到这一点吗?

一旦我们单击下载链接,“另存为”对话框就会出现,之后我认为我们没有任何控件来检查进度。我认为我们甚至不知道单击了哪个按钮,即我们不知道用户是否单击了"is"或“否”。

有人可以建议一种方法来了解下载何时开始以及何时完成吗?我们使用 Asp.Net 2.0 和 c#。

下面给出了用于下载的处理程序

               string fileUrl = string.Empty;

                if (context.Request["fileUrl"] != null)
                {
                    fileUrl = context.Request["fileUrl"].ToString();                    
                }
                string filename = System.IO.Path.GetFileName(fileUrl);

                context.Response.ClearContent();
                context.Response.ContentType = "application/exe";
                context.Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", filename));
                context.Response.TransmitFile(fileUrl);
                context.Response.Flush(); 

该文件是从 aspx 页面方法下载的

private void DownloadExe()
{
  string downloadUrl = "Test.exe");
  Response.Redirect("Test.ashx?fileUrl=" + downloadUrl, false);
}

最佳答案

您的 ASHX 处理程序知道下载是否开始(因为它实际上被调用)以及下载何时完成(到达处理程序末尾)。如果您手动分块写入响应,您甚至可能会在服务器端获得一些进度,这样您还可以在用户取消下载时检测到某些情况(如果写入响应流在某些时候失败)。

根据您的需要,您可以将此信息传输到其他页面(即通过 session 状态)或简单地存储在某个数据库中。

关于c# - 如何使用 ashx 处理程序识别下载是否完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11287551/

相关文章:

c# - Qt : Find object in list by property

c# - 如何从 SOAP 消息中检索集合

c# - 在单个 asp 页面上构建多个表单标签

javascript - Ajax PHP 返回空文件

java - 使用 Servlet 下载文件时如何使用 GWT?

c# - .NET 分布式分层应用程序

c# - 通过反射调用一个方法,没有得到TargetInvocationException

c# - 异步下载多个文件并等待所有文件完成,然后再执行其余代码

c# - 如何使用agora.io Unity SDK获取 channel 用户列表

asp.net - 如何在 asp.net 的 Razor View 中禁用旋转按钮?