使用 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)文件操作

使用Jquery强制从外部服务器下载映像

Javascript/Jquery:下载多张图片并保存在本地

通过 jQuery 下载时获取空 PDF

使用 JavaScript 或 jQuery 拆分文件

使用 javascript/jquery 验证文件上传 [重复]