假设我有一个返回FileResult
的控制器操作方法。是否可以检测文件是否实际上已完全下载到客户端?
public ActionResult GetFile(int id)
{
DownloadInfo data = provider.GetInfo(id);
this.provider.MarkDownloadStart(id);
return File(Server.MapPath(data.Filename), "application/pdf");
}
我确实在调用操作时存储信息,但这只意味着有人启动了下载。它没有在服务器上给我任何信息,下载是否完成。。。
我还设置了内容处理头,这样文件就不会直接在浏览器中打开,而是浏览器要求打开/保存它。这使客户端更容易保存文件。。。
我的想法
我想不可能直接检测到下载确实发生了。但是有没有可能通过其他方式来做到这一点,比如通过某种方式:
- 加载一个视图
- 具有
iframe
- 请求一个文件,并且
- 主视图监督客户端上的下载,因为它可以访问CCD_
尽管上面的场景看起来可能可行,但我不知道如何实际执行监督。也许还有其他更好的方法来完成这项任务。
主要问题是
是否可以在服务器上检测到客户端完全完成了文件下载,而在下载之间没有取消?
您可以使用cookie。下面是一个例子。以下是该过程中涉及的一些步骤:
- 在客户端上生成一些唯一的id
- 通过传递此唯一id将请求发送到下载操作
- 使用
window.setInterval
定期查询是否存在cookie,并检查其值 - 如果cookie已创建,并且其值与唯一id中的值匹配,则下载已完成
在服务器上,一旦您完成了将文件流式传输到响应,就将cookie值设置为唯一id。
请访问此url
http://odetocode.com/blogs/scott/archive/2010/06/23/checking-client-download-success-with-asp-net-mvc.aspx
希望这对你有所帮助