我们正在使用ASP.NET MVC,我们的行动是这样做的:
现在问题出现的原因是由于某种原因下载没有完成 - 也许用户点击“取消”或IE弹出下载安全栏。我想知道是否有替代解决方案。
我们是否可以将下载内容推送给用户,然后只有在我们确定已收到正确的字节数时才将记录标记为已下载?我不得不说我正在努力解决这个问题,并且尽可能让终端用户轻松解决这个问题。
答案 0 :(得分:1)
我不相信有。如果需要,您可能需要将Silverlight(或闪存)控件与您的应用程序结合使用。
基本上,任何一种方法都是打开与HTTP URL的套接字连接,并将其保存到用户驱动器上的相应路径。下载完成后,您可以让控件从文件生成哈希值并将其发送回某个ASP页面。如果哈希值从未提交或不正确,则表示他们没有完成该文件。
答案 1 :(得分:1)
您可能会尝试两件事,而不是简单地将用户重定向到要下载的资源(通过弹出您想要下载的文件)。将资源作为字节数组推出页面。下载完成后,将下载页面重定向到另一个页面。在此页面上,您可以添加到您的工作流程,询问下载是否正常。而且,如果他们达到这个目的,你可以假设(ass-u-me)它有效。要实际跟踪下载的程度,我认为这是不可行的,因为在另一端没有任何东西监视接收到的字节。
答案 2 :(得分:1)
即使检查所有字节都已发送,也无法保证:
答案 3 :(得分:1)
如果没有在客户端上运行的进程可以验证传输完成,则没有任何可靠的方法可以执行此操作。当然,我们可以合理地期望用户已经拥有或愿意安装的唯一流程是 Flash 。
只有Flash 10支持在用户请求时将文件直接保存到磁盘。 (以前的版本有一个“共享对象”,它有点像一个非常大的cookie空间,而不是用于传输文件但保存可重用的应用程序数据)。 Read up here了解如何通过Flash 10与最终用户的文件系统进行交互。
基本上有一个方法调用save()
,它会将数据推送到用户选择的位置。特定位置对您的代码隐藏;出于明显的安全原因,您只需将文件推入黑盒子,然后Flash处理其余部分。
这里缺少的唯一信息是如何将您的文件放入Flash播放器,但任何具有一点Flash经验的人都可以毫不费力地通过几分钟的研究来确定这一点。如果没有Flash经验,你仍然应该在一天内工作。