Asp.net mvc 是否可以检测文件是否实际下载

Asp.net mvc 是否可以检测文件是否实际下载,asp.net-mvc,fileresult,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"); } 我确实在调用操

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

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

    return File(Server.MapPath(data.Filename), "application/pdf");
}
我确实在调用操作时存储信息,但这只意味着有人启动了下载。它没有给我任何关于服务器的信息是否下载完成

我还设置了内容处理头,这样文件就不会直接在浏览器中打开,而是由浏览器要求打开/保存。这使客户端更容易保存文件

我的想法 我想不可能直接检测到下载已经发生了。但有没有可能通过其他方式来实现:

  • 加载一个视图
  • 具有
    iframe
  • 请求一个文件和
  • 主视图监督客户端上的下载,因为它可以访问
    iframe
    ,所以它可以查看文件是否已完成下载
  • 即使上面的场景看起来是可行的,我也不知道该如何进行实际的监督。也许还有其他更好的方法来完成这项任务

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

    您可以使用cookies。给你。以下是该过程中涉及的一些步骤:

  • 在客户端上生成一些唯一的id
  • 通过传递此唯一id将请求发送到下载操作
  • 使用
    窗口.setInterval
    定期查询是否存在cookie并检查其值
  • 如果创建了cookie且其值与唯一id中的一个匹配,则下载已完成
  • 一旦您将文件流式传输到响应,请在服务器上将cookie值设置为唯一id。

    请访问此url


    希望这对您有所帮助

    ,但由于用户取消了下载,所以完成流媒体传输肯定会发生。。。所以这并不是说下载已经完成了。但更重要的是,我对在客户端检测已完成的下载并不感兴趣,而是在服务器上。。。我已更新了我的问题以反映这一事实。是否要在服务器上检测客户端是否已完成或取消下载?恐怕这是不可能的。嗯。。。不可能似乎很容易回答;)但也可能是唯一可能和真实的答案。请注意,这是不鼓励的,因此答案应该是搜索解决方案的终点(而不是参考文献的另一个中途停留,随着时间的推移往往会变得陈旧)。请考虑在这里添加一个独立的概要,将链接作为参考。