这是一个以各种不同方式提出的常见问题,我在下面收集了一些链接并解释了它们为什么不起作用。我正在寻找以下问题的完整解决方案。
在我正在开发的 Web 应用程序中,需要下载具有以下要求的 AJAX-esque 文件
- 用户可以单击链接下载文件,而无需被定向到新页面,将收到一个正常的“另存为..”对话框,我们都习惯于在 Web 浏览器中下载文件
- 如果由于某种原因服务器无法提供文件,则应调用 javascript 回调。同样,如果服务器成功提供文件
- 需要能够修改HTTP请求头来指定,例如请求中的Content-Type HTTP头
- 支持所有 A 级浏览器
目前研究的东西:
一个。jquery.fileDownload通过使用表单提交、隐藏 iframe 和让服务器设置特定 cookie 的组合非常优雅地解决了需求 1、2 和 4。我对这个项目非常熟悉(也为它做出了贡献)。但不支持要求 3,因为 HTML 表单提交和 iframe(此库使用)不允许为请求的服务器资源指定 HTTP 标头。(jdownloader也使用了类似的 iframe/form 技术,但它也没有解决要求 3)。
湾。可以使用 XMLHttpRequest 从文件中检索二进制数据(针对不同的浏览器(链接 1、链接 2、链接 3、链接 4、链接 5、链接 6、链接 7、链接 8)进行各种黑客攻击。但没有一个满足要求 1. 二进制数据可以保存在 javascript 变量中,但是无法调用浏览器的“另存为...”对话框来允许用户将此二进制数据保存到硬盘上的文件中
C。此链接(在“下载 + 将文件保存到 HTML5 文件系统”标题下)具有使用 XHR2 的完整端到端解决方案并满足要求 1、2 和 3。但它的支持很差(使用非常新的 HTML5 FileWriter )。
有没有完整的解决方案?
编辑 我们有更多的选择 - 我计划测试。也许唯一的选择是通过将所有黑客/解决方案收集在一起来为这个问题开发一个库,以便创建一个通用的解决方案。