【问题标题】:How to download file with javascript?如何用javascript下载文件?
【发布时间】:2019-02-11 08:02:56
【问题描述】:

我希望能够在按下按钮时下载给定的文件。该文件将通过API 调用提供。现在,我将其保存在我的本地存储中。 所以我的文件夹是这样的:

rootFolder
-JS file
-HTML file
-download file (`sample.csv`)

如何创建下载link? 到目前为止,我已经尝试过: <a download="sample.csv"></a> 我也尝试过使用onclick 事件:

<a download="sample.csv" onclick="download()"></a>

function download|(){
   .....code that calls the `api`
}

我不知道这两个如何匹配:the download API(如果有)和click 事件处理程序(如果您打算在下载时执行其他逻辑)。

【问题讨论】:

标签: javascript download


【解决方案1】:

您可以提供此功能的链接以下载文件:

function downloadURI(uri, name) 
{
    var link = document.createElement("a");
    link.download = name;
    link.href = uri;
    link.click();
}

【讨论】:

  • 如果文件在我的本地存储中,它的工作原理都一样吗?
  • 本地存储到底是什么意思?你没有使用任何本地服务器吗?
【解决方案2】:

由于@saibbyweb 的答案在我写这篇文章时不适用于所有浏览器,我推荐其他但类似的解决方案,在最新(截至撰写时)Firefox、Chrome、Opera、Edge、Safari、移动 Safari 中测试和工作,移动 Chrome:

function downloadUrl(url){
    window.open(url, '_self');
}

不用说,您也可以使用 _blank 而不是 _self 在新选项卡中打开链接,但您可能会通过使用 Javascript 打开新选项卡/窗口来吓到弹出窗口阻止程序。

【讨论】:

  • 有没有办法这样设置文件名?
  • @Zoid 因为这直接打开一个url,所以只有服务器可以发送适当的Headers来设置下载的文件名。
【解决方案3】:

您可以通过 HTML &lt;a href="/path/to/sample.csv"&gt;&lt;/a&gt; 来完成,但如果您必须在 JS 中完成,则有 https://github.com/eligrey/FileSaver.js/ 库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    相关资源
    最近更新 更多