用JavaScript开始文件下载

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

假设我有我的网站上的文件的下载链接。

点击时,这些链接发送一个AJAX请求到服务器,该服务器返回包含该文件位置的URL。

我想要做的是在响应回来时指示浏览器下载文件。有没有一种便携式的方式来做到这一点?

提问于
用户回答回答于

我们这样做:首先添加这个脚本。

<script type="text/javascript">
function populateIframe(id,path) 
{
    var ifrm = document.getElementById(id);
    ifrm.src = "download.php?path="+path;
}
</script>

把它放在你想要下载按钮的地方(这里我们只用一个链接):

<iframe id="frame1" style="display:none"></iframe>
<a href="javascript:populateIframe('frame1','<?php echo $path; ?>')">download</a>

文件'download.php'(需要放在你的服务器上)只包含:

<?php 
   header("Content-Type: application/octet-stream");
   header("Content-Disposition: attachment; filename=".$_GET['path']);
   readfile($_GET['path']);
?>

所以当你点击链接时,隐藏的iframe会获取/打开源文件'download.php'。用路径作为get参数。我们认为这是最好的解决方案!

应该指出的是,这个解决方案的PHP部分是一个简单的演示,可能非常非常不安全。它允许用户下载任何文件,而不仅仅是预定义的文件。这意味着他们可以下载网站本身的部分源代码,可能包含API凭证等。

扫码关注云+社区