在我们的一个项目中,我们需要将文件从服务器下载到客户端位置的功能。
为此,我们使用 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/