Dav*_*ope 20 javascript browser download save dom-events
我有敏感文件要下载给用户,每个用户只能下载一次给定文件.如果下载失败,我想允许重新下载,但不允许.
依靠在服务器上记录/处理文件下载请求是不够的 - 我需要确定地知道文件何时完成并在客户端就位,因为我的许多用户在频繁连接丢失的环境中工作.
最直接的方法是,如果浏览器从"另存为..."对话框中公开了"文件已保存"事件,该对话框可以连接到下载页面上的JavaScript函数(可以回发到服务器).但是,直觉表明,如果浏览器暴露了这个功能,可能会出现安全漏洞,因为它会在沙箱之外偷偷溜走.我不确定这是否可能.
我在这个领域发现 了 其他 几个问题 ,但没有具体说明这个问题.
有任何想法吗?
编辑:我不应该在原始问题中使用"安全"一词,对不起触发红色鲱鱼.
编辑2:我的"安全"措辞误导人们进入了外部技术安全问题,但你们两人都证实了我的怀疑,"不,没有浏览器支持." 因为他的第一句话得到了我的期待,所以我正在为第一个评论者做出回答.谢谢大家.
rek*_*kna 19
这是一个很好的解决方案:
http://gruffcode.com/2010/10/28/detecting-the-file-download-dialog-in-the-browser/
它基本上通过在下载文件的响应头中设置一个cookie来工作,所以javascript会定期检查这个cookie的存在...
JavaScript中没有这样的浏览器事件,即使您无法信任用户的浏览器为您提供安全性.
您最好使用GUID为每次下载生成唯一的URL.然后你可以举例如:
让我澄清最后一颗子弹.假设你使用的是Java -你会in.read(buffer)
和out.write(buffer)
一个循环,直到EOF.如果客户端断开连接,您将收到一个IOException
期间out.write()
,并将能够从中断的一个成功下载.在其他平台上,我确信有办法判断连接是否丢失.
编辑:您实际上可以使用您链接的其中一个问题的接受答案中列出的技巧来触发浏览器事件.然而,这不是限制下载次数的可靠解决方案.