如何使用JavaScript从URL下载PDF?

9
我需要从我们的一个在线资源中下载PDF文件。没有内置的批量下载功能。唯一的方法是导航到每个PDF文件,单击打开,然后单击下载。 有几千个文件,这将需要很长时间才能完成。 过去我使用JavaScript解决了这个问题。我收集了所有pdf链接,放入csv中,然后让代码循环遍历每个链接,下载并继续下一个链接。
不幸的是,我已经丢失了那段代码,而我重新创建它的努力一直没有成功。
我尝试了这篇文章中的每一个方法:How to download PDF automatically using js? 我还尝试了这篇文章中的代码(我相信这就是我之前做的):https://www.convertplug.com/plus/docs/download-pdf-file-forcefully-instead-opening-browser-using-js/ 这是我认为应该有效的方法...根据我上面提到的第二篇文章。
function download_file(fileURL, fileName) {
var link = document.createElement('a');
link.href = fileURL;
link.download = 'file.pdf';
link.dispatchEvent(new MouseEvent('click'));
}
var fileURL = "link/to/pdf";
var fileName = "test.pdf";
download(fileURL,fileName);

上述代码只是为了测试从硬编码的URL下载一个文件。如果按照预期运行,当页面加载时,它应该从提供的URL下载PDF文件。然而,在加载或刷新时它什么也没做。有什么建议吗?

浏览器是否可能不允许您的应用程序下载多个文件? - Barak
3
尝试使用 "download_file" 而不是 "download"。 - Smart Manoj
2个回答

12
请查看https://dev59.com/K1sW5IYBdhLWcg3wsY9P#34694012
<a href="http://www.africau.edu/images/default/sample.pdf" download="sample.PDF">click me</a>

另一个:

https://dev59.com/KW865IYBdhLWcg3wOcHy#45905238

function download(url, filename) {
fetch(url).then(function(t) {
    return t.blob().then((b)=>{
        var a = document.createElement("a");
        a.href = URL.createObjectURL(b);
        a.setAttribute("download", filename);
        a.click();
    }
    );
});
}

download("https://get.geojs.io/v1/ip/geo.json","geoip.json")
download("data:text/html,Hello Developer!", "HelloDeveloper.txt");

我希望它有用。 https://www.convertplug.com/plus/docs/download-pdf-file-forcefully-instead-opening-browser-using-js/

1
谢谢提供信息!这一定与我的浏览器有关。上面的两个代码片段只是打开URL上的文件,而不是下载。 - KMCSACK
我刚刚在Firefox和IE中再次尝试了一下,但结果相同...所以不是浏览器的问题? - KMCSACK
我遇到了以下错误:t.blob is not a function。如果我在blob后面删除函数括号,那么下载的文件将会损坏或为空。 - Sardar Faisal

6
  1. 你必须将链接元素添加到DOM

function download_file(fileURL, fileName) {
  var link = document.createElement('a');
  link.href = fileURL;
  link.download = fileName;
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
}

var fileURL = "https://cdn.sstatic.net/clc/img/jobs/bg-remote-header-sm.png";
var fileName = "test.pdf";
download_file(fileURL, fileName); // fix function name

  1. 链接必须在相同的起源(origin)

    由于其href URL具有不同的安全起源,因此锚上的下载属性被忽略。


那是什么意思?我能够让Hardik的代码工作,但当我添加自己的URL时,它什么也不做。您提供的代码只会将我带到文件,但不会下载。 - KMCSACK
好的,我刚刚查了一下"origin"是什么意思。如果我的脚本存储在本地服务器上,我该如何让它工作呢? - KMCSACK
原始意味着您不能从其他 URL 下载文件,只能在当前 URL 上运行脚本。 - Medet Tleukabiluly
我以前做过这个,只是代码丢了。我的在线资源是否添加了安全功能以防止我所做的事情?就像我说的,我过去曾经让它工作过。 - KMCSACK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接