是否可以检测文件是否真的下载了



假设我有一个返回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. 主视图监督客户端上的下载,因为它可以访问CCD_

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

主要问题是

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

您可以使用cookie。下面是一个例子。以下是该过程中涉及的一些步骤:

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

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

请访问此url

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

希望这对你有所帮助

相关内容

  • 没有找到相关文章

最新更新