使用 JavaScript/jQuery 下载文件
Posted
技术标签:
【中文标题】使用 JavaScript/jQuery 下载文件【英文标题】:Download File Using JavaScript/jQuery 【发布时间】:2011-04-14 12:51:26 【问题描述】:我有一个非常相似的需求,指定here。
$('a#someID').click();
时我需要让用户的浏览器手动开始下载
但我不能使用window.href
方法,因为它会将当前页面内容替换为您尝试下载的文件。
相反,我想在新窗口/标签中打开下载。这怎么可能?
【问题讨论】:
我在相关问题中尝试了很多答案,this is the definitive answer. 设置 window.location.href 对我有用。窗口内容也不会改变。我假设您使用了错误的 contentType? 【参考方案1】:使用锚标签和php可以做到,检查这个答案
JQuery Ajax call for PDF file download
html
<a href="www.example.com/download_file.php?file_source=example.pdf">Download pdf here</a>
PHP
<?php
$fullPath = $_GET['fileSource'];
if($fullPath)
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
switch ($ext)
case "pdf":
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download
header("Content-type: application/pdf"); // add here more headers for diff. extensions
break;
default;
header("Content-type: application/octet-stream");
header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
if($fsize) //checking if file size exist
header("Content-length: $fsize");
readfile($fullPath);
exit;
?>
我正在检查文件大小,因为如果您从 CDN 云端加载 pdf,您将无法获得强制文件以 0kb 下载的文档大小,为避免这种情况,我正在检查此条件
if($fsize) //checking if file size exist
header("Content-length: $fsize");
【讨论】:
【参考方案2】:我知道我迟到了,但我想分享我的解决方案,它是上述 Imagine Breaker 解决方案的变体。我尝试使用他的解决方案,因为他的解决方案对我来说似乎最简单易行。但就像其他人所说的,它不适用于某些浏览器,所以我使用 jquery 对其进行了一些修改。
希望这可以帮助那里的人。
function download(url)
var link = document.createElement("a");
$(link).click(function(e)
e.preventDefault();
window.location.href = url;
);
$(link).click();
【讨论】:
整个函数体只是window.location.href = url
的一种过于复杂的方式。您创建的链接不用于任何用途。以上是关于使用 JavaScript/jQuery 下载文件的主要内容,如果未能解决你的问题,请参考以下文章
上传/下载之前/之后的客户端(javascript/jQuery)文件操作