2

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

为此,我们使用 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);
}
4

3 回答 3

1

这个怎么样:

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

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

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

于 2012-09-18T01:51:29.990 回答
1

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

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

于 2012-07-02T05:14:11.587 回答
0

好的,我遇到了同样的问题并跳过了这个网站: Check over coockies

这对我很有用。

于 2016-09-14T14:36:42.280 回答