使用Javascript/jQuery下载文件
我有一个非常类似的要求,指定这里。
我需要让用户的浏览器在$('a#someID').click();
时手动开始下载。
但我不能使用window.href
方法,因为它会将当前页面内容替换为你要下载的文件。
相反,我想在新窗口/标签中打开下载。这怎么可能呢?
322
3
我有一个非常类似的要求,指定这里。
我需要让用户的浏览器在$('a#someID').click();
时手动开始下载。
但我不能使用window.href
方法,因为它会将当前页面内容替换为你要下载的文件。
相反,我想在新窗口/标签中打开下载。这怎么可能呢?
使用一个不可见的
<iframe>
。为了迫使浏览器下载一个它本来能够渲染的文件(如HTML或文本文件),你需要服务器将文件的MIME类型设置为一个无意义的值,如
application/x-please-download-me
,或者是application/octet-stream
,用于任意二进制数据。如果你只想在一个新的标签页中打开它,唯一的方法是让用户点击一个
target'属性设置为
_blank'的链接。在jQuery中:
每当该链接被点击,它将在新的标签/窗口中下载文件。
2019年现代浏览器更新
这是我现在推荐的方法,但有一些注意事项。
2012年原创的基于jQuery/iframe/cookie的方法。
我已经创建了jQuery文件下载插件(Demo)(GitHub),它也可以帮助解决你的情况。它的工作原理与iframe很相似,但有一些很酷的功能,我觉得很方便。
非常容易设置,有漂亮的视觉效果(jQuery UI Dialog,但不是必须的),一切都经过测试。
用户不会离开他们开始下载文件的同一页面。这个功能对现代网络应用来说是至关重要的
successCallback和failCallback函数允许你明确说明用户在任何情况下看到的东西。
结合jQuery UI,开发人员可以很容易地显示一个模态,告诉用户正在进行文件下载,在下载开始后解散模态,甚至以友好的方式通知用户发生了一个错误。请看Demo中的一个例子。希望这能帮助到别人!
这里是一个使用插件source与承诺的简单用例演示。演示页包括许多其他的,'更好的用户体验'例子。
如果你已经在使用jQuery,你可以利用它来制作一个更小的片段。 一个jQuery版本的Andrew'的答案。