使用javascript/ajax/jquery强制下载pdf链接

Dha*_*jay 22 javascript

假设我们有一个pdf链接" http://manuals.info.apple.com/en/iphone_user_guide.pdf "(仅举例来说,让你知道我的服务器上没有该文件,我只有链接).. .现在我必须在我的网站上提供一个按钮来下载文件.

我尝试了各种各样的东西,如window.open,href等方法,但它打开其他窗口上的链接.我知道这是因为现在所有浏览器都带有一个adobe插件,可以在另一个窗口中打开它,但仍然没有任何方式我给用户提供下载选项而不是通过客户端脚本打开它.

请帮忙..谢谢

laj*_*rre 34

这是一个Javascript解决方案(对于像我这样寻找标题答案的人):

function SaveToDisk(fileURL, fileName) {
    // for non-IE
    if (!window.ActiveXObject) {
        var save = document.createElement('a');
        save.href = fileURL;
        save.target = '_blank';
        save.download = fileName || 'unknown';

        var evt = new MouseEvent('click', {
            'view': window,
            'bubbles': true,
            'cancelable': false
        });
        save.dispatchEvent(evt);

        (window.URL || window.webkitURL).revokeObjectURL(save.href);
    }

    // for IE < 11
    else if ( !! window.ActiveXObject && document.execCommand)     {
        var _window = window.open(fileURL, '_blank');
        _window.document.close();
        _window.document.execCommand('SaveAs', true, fileName || fileURL)
        _window.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

来源:http://muaz-khan.blogspot.fr/2012/10/save-files-on-disk-using-javascript-or.html

不幸的是,我使用的是IE11,它不接受新的MouseEvent.在这种情况下我使用以下内容:

//...
try {
    var evt = new MouseEvent(...);
} catch (e) {
    window.open(fileURL, fileName);
}
//...
Run Code Online (Sandbox Code Playgroud)

  • @Dino这段代码肯定应该进行维护,增强和集体更新,以便对技术更新进行考虑.但我不知道如何在SO上实现这个utopic目标:) (2认同)

sar*_*ink 25

使用HTML5"下载"属性

<a href="iphone_user_guide.pdf" download="iPhone User's Guide.PDF">click me</a>
Run Code Online (Sandbox Code Playgroud)

警告:在撰写本文时,在IE/Safari中无效,请参阅:caniuse.com/#search=download

编辑:如果您正在寻找一个实际的 JavaScript解决方案,请参阅lajarre的答案

  • OP对我无关紧要(所有应得的尊重)。此页面在Google中显示为第一个结果之一,但未回答我的查询,该查询与标题完全相同。如果您不明白,请参阅我的回答。 (2认同)

Ben*_*nny 6

使用JavaScript,即使不是不可能,也很困难(?).我建议使用某种代码隐藏语言,如PHP,C#或Java.如果您使用PHP,您可以在按钮发布的页面中执行以下操作:

<?php
header('Content-type: application/pdf');
header('Content-disposition: attachment; filename=filename.pdf');
readfile("http://manuals.info.apple.com/en/iphone_user_guide.pdf");
?>
Run Code Online (Sandbox Code Playgroud)

这似乎也适用于JS(来自http://www.phpbuilder.com/board/showthread.php?t=10149735):

<body>
<script>
function downloadme(x){
myTempWindow = window.open(x,'','left=10000,screenX=10000');
myTempWindow.document.execCommand('SaveAs','null','download.pdf');
myTempWindow.close();
}
</script>

<a href=javascript:downloadme('http://manuals.info.apple.com/en/iphone_user_guide.pdf');>Download this pdf</a>
</body>
Run Code Online (Sandbox Code Playgroud)


小智 5

是使用 javaScript 下载文件的完美示例。

用法: download_file(fileURL, fileName);