【问题标题】:Force download of file from external url not open in new tab/window强制从外部 url 下载文件不在新选项卡/窗口中打开
【发布时间】:2020-07-16 13:09:44
【问题描述】:

我正在尝试使用 JavaScript 下载文件,但不让它在新选项卡或窗口中打开。

到目前为止,我所拥有的是:

var link = document.createElement("a");
link.download = filename;
link.href = fileurl;
link.click();

我一直在对此进行大量研究,但找不到任何可行的方法,因为该文件来自我无法控制且无法修改其标题的 Google 签名 URL。

这必须发生在客户端 JavaScript/jQuery 中。

编辑

它实际上是动态的,所以可以有 X 个文件,如果我可以将它们全部下载为 zip,那就更好了。

for(var i=0; i<filenames.length; i++){
    var formData = new FormData();
    formData.append('filename', filenames[i]);
    
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function(){
        if(this.readyState == 4 && this.status == 200){
            fileurl = this.responseText;
            
            var link = document.createElement("a");
            link.download = filenames[i];
            link.href = fileurl;
            link.click();
        }
    }
    xmlhttp.open("POST", "url_to_get_download_urls");
    xmlhttp.send(formData);
}

【问题讨论】:

    标签: javascript jquery download


    【解决方案1】:

    您是否尝试过在不同的浏览器中执行下载操作?在最新版本的 Chrome 中,您无法下载跨域文件(它们必须托管在同一域中)。

    如果文件没有更改,您是否尝试过自己托管文件并启动下载?

    编辑:如果您尝试将项目捆绑到一个 zip 中以供下载,则需要在您自己的服务器上进行初始下载并在那里进行压缩。

    【讨论】:

    • Google 签名 URL 上的 CORS 策略允许我的域,所以我认为我应该能够下载它们。这些可能是非常大的文件,因此为了可扩展性,不能将它们保存到我的服务器并从那里下载它必须是客户端。
    • @PaddyHallihan 这里还有一些项目可以尝试medium.com/charisol-community/…
    猜你喜欢
    • 1970-01-01
    • 2019-08-23
    • 2012-01-28
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多