是否可以检测文件是否实际下载

时间:2012-04-07 09:30:51

标签: asp.net-mvc fileresult

假设我有一个返回FileResult的控制器操作方法。是否可以检测文件是否实际下载完全发送给客户端?

public ActionResult GetFile(int id)
{
    DownloadInfo data = provider.GetInfo(id);
    this.provider.MarkDownloadStart(id);

    return File(Server.MapPath(data.Filename), "application/pdf");
}

我在调用操作时会存储信息,但这只表示某人启动了下载。它没有给我任何关于服务器的信息是否下载完成...

我还设置了内容处理标题,因此假定文件不会直接在浏览器中打开,而是浏览器要求打开/保存它。这使客户端更容易保存文件...

我的想法

我想直接检测到实际发生的下载是不可能的。但是有可能以某种方式做其他方式:

  1. 加载视图
  2. 有一个iframe
  3. 请求文件和
  4. 主视图监督在客户端上下载,因为它可以访问iframe,以便查看文件是否已完成下载。
  5. 即使上层场景似乎可行,但我不知道如何实际执行监督。也许还有其他 - 更好 - 的方式来完成这项任务。

    主要问题是

    是否有可能在服务器上检测到客户端完成了文件下载并且在下载之间没有取消它?

2 个答案:

答案 0 :(得分:2)

您可以使用Cookie。这是an example。以下是该过程中涉及的一些步骤:

  1. 在客户端上生成一些唯一ID。
  2. 通过传递此唯一ID将请求发送到下载操作。
  3. 使用window.setInterval定期查询Cookie的存在并检查其值。
  4. 如果创建了cookie并且其值与唯一ID匹配,则下载已完成。
  5. 在完成将文件流式传输到响应后,服务器上将cookie值设置为唯一ID。

答案 1 :(得分:-1)