【问题标题】:Correct way to trigger a file download (in PHP)?触发文件下载的正确方法(在 PHP 中)?
【发布时间】:2009-01-15 05:36:09
【问题描述】:

快速(希望是简单的)问题:我需要触发下载由 PHP 文件生成的 PDF 文件。我可以这样做:

<a href="download.php">Download</a>

但我应该以另一种方式这样做吗?也许是Javascript?上述方法有效,但窗口显示“正在加载...”,直到下载开始。我想向用户提供一些正在发生的事情的反馈。

想法?

注意:我已经有了从服务器发送文件的代码。它完美地工作。这个问题只是关于如何最好地从客户端调用该脚本。

某些网站的下载会自动启动。他们是怎么做到的?

直接 URL 的问题在于,如果 PHP 脚本出错,它将替换现有页面的内容,这不是我想要的。

【问题讨论】:

  • 这个问题与 PHP 没有任何关系,它的标题、措辞和标签误导性地吸引了寻找完全不同的东西的访问者。我写这篇文章是因为这是我在寻找真正关于 PHP 的东西时得到的第一个结果。我试图编辑,但我的编辑被拒绝了 :( 所以我恳请原始发帖人或其他有权从这篇文章中删除任何对 PHP 的引用的人。
  • 这也发生在我身上,汤姆,已编辑。
  • 我实际上发现这很有用,因为当我搜索“使用 javascript 的 php 服务器下载文件”时它首先出现

标签: javascript html download


【解决方案1】:

编辑

是的 javascript,类似于:

<a href="download.php" onclick="this.innerHTML='Downloading..'; downloadPdf(this);">Download</a>

如果您需要真正了解何时开始下载,您可能需要调用 iframe,然后在其上使用“onload”事件。例如:

// javascript
function downloadPdf(el) {
    var iframe = document.createElement("iframe");
    iframe.src = "download.php";
    iframe.onload = function() {
        // iframe has finished loading, download has started
        el.innerHTML = "Download";
    }
    iframe.style.display = "none";
    document.body.appendChild(iframe);
}

【讨论】:

  • 你应该返回 false 来禁用链接。
【解决方案2】:

您下载的解决方案很好。您可能需要考虑给用户一些视觉反馈,也许通过使用 javascript 在通过 onclick 处理程序单击链接时在当前页面上显示“正在下载,请等待消息”。或者只是在链接旁边表明下载可能需要一些时间才能开始。由于 IE 会卸载页面,停止任何 GIF 动画,我更喜欢文本指示来下载文件。

【讨论】:

    【解决方案3】:

    通过使用 onclick 事件处理程序来伪造它以显示旋转的 gif

    <a href="download.php" onclick="ShowDownloading();">Download</a>
    

    【讨论】:

      【解决方案4】:

      自动开始下载通常使用普通页面内的元标记:

      <META HTTP-EQUIV="REFRESH" CONTENT="10.0;URL=download.php">
      

      本示例将在 10 秒内将浏览器重定向到 download.php。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-30
        相关资源
        最近更新 更多