在我们的项目之一中,我们需要将文件从服务器下载到客户端位置的功能。
为此,我们使用ashx处理程序进行操作。它工作正常,我们能够下载文件。
现在,我们需要一个需求,就像我们需要在下载开始和完成时更新字段一样。有什么办法可以做到这一点。
单击下载链接后,将出现“另存为”对话框,此后,我认为我们没有任何控件可以检查进度。我认为我们甚至不知道单击了哪个按钮,即我们不知道用户单击的是“是”还是“否”。
任何人都可以建议一种方法来知道何时开始下载以及何时完成下载吗?我们正在将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处理程序会知道是否开始下载(因为实际上已调用它)以及下载完成时(到达处理程序的结尾)。如果您手动以块的形式编写响应,则甚至可能会获得一些进度服务器端的信息,这样,您还可以检测到用户取消下载的某些情况(如果写入响应流有时会失败)。
根据您的需求,您可以将这些信息传输到其他页面(即通过会话状态)或仅存储在某些数据库中。