如何使用ashx处理程序确定下载是否已完成

时间:2012-07-02 03:42:56

标签: c# asp.net download httphandler ashx

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

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

现在我们需要一个类似于下载开始和完成时需要更新字段的要求。有没有办法做到这一点。

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

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

用于下载的处理程序如下所示

               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);
}

3 个答案:

答案 0 :(得分:1)

如果下载开始(因为它实际上被调用)并且下载完成(到达处理程序结束),您的ASHX处理程序就会知道。如果您正在以块的形式手动编写响应,您甚至可能获得一些进度服务器端,这样您也可以在用户取消下载时检测到某些情况(如果在某些时候写入响应流失败)。

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

答案 1 :(得分:1)

这个怎么样:

Response.BufferOutput = false;
Response.TransmitFile(fileUrl);
//download complete code

如果禁用响应输出缓冲,则在客户端完成接收之前,它不会超过将文件发送到客户端的代码行。如果他们在中途取消下载,则会抛出HttpException,因此下载完整代码无法运行。

您也可以在调用刷新缓冲区后下载完整代码。但最好不要在发送大型二进制文件时启用缓冲以保存在服务器内存中。

答案 2 :(得分:0)

好的,我有同样的问题,跳过这个网站: Check over coockies

这对我很有用。