3

假设我有一个返回的控制器操作方法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因此它可以查看文件是否已完成下载。

尽管上面的场景看起来可行,但我不知道如何实际进行监督。也许还有其他更好的方法来完成这项任务。

主要问题是

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

4

2 回答 2

2

你可以使用cookies。这是一个例子。以下是该过程中涉及的一些步骤:

  1. 在客户端上生成一些唯一的 id。
  2. 通过传递此唯一 ID 将请求发送到下载操作。
  3. 使用 awindow.setInterval定期查询 cookie 的存在并检查其值。
  4. 如果创建了 cookie 并且其值与唯一 id 之一匹配,则下载完成。

一旦您完成将文件流式传输到响应,在服务器上将 cookie 值设置为唯一 id。

于 2012-04-07T09:40:28.723 回答
-2

请访问此网址

http://odetocode.com/blogs/scott/archive/2010/06/23/checking-client-download-success-with-asp-net-mvc.aspx

希望这对你有帮助

于 2013-09-24T08:25:21.620 回答