【问题标题】:Download file when user clicks dialog button用户单击对话框按钮时下载文件
【发布时间】:2023-05-18 03:21:02
【问题描述】:

当用户单击 url 时,我打开了一个对话框。在该对话框中,我有两个按钮,“确定”(关闭对话框)和“下载文件”(我希望在单击时下载我刚刚通过 PHP 创建的文件)。如何使用“下载文件”按钮实现该功能?

我尝试了 $.get 但它只检索文件的数据,并没有提示用户下载文件。

谢谢。

【问题讨论】:

    标签: jquery button dialog


    【解决方案1】:

    在该按钮的点击处理程序中:

    window.location.href = "path/to/file/on/server.txt";
    

    顺便说一句,在这种情况下,您实际上不必写出文件。您可以使用 URL 重写使其成为“虚拟文件”,它运行您的 PHP 代码以在访问时发出文件数据。您更改 PHP 以直接返回生成的文件数据,而不是将其写入文件。

    编辑:Apache 中的虚拟文件:

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /vfiles
        RewriteRule ~vfiles/([a-z]+)\.txt vfile-handler.php?id=$1 [L,QSA]
    </IfModule>
    

    这表示http://my.server/vfiles/foo.txt 在 Apache 服务器内被透明重定向以运行 vfile-handler.php,将其作为查询字符串传递“id=foo”,您可以像处理任何其他带有查询的 GET 请求一样处理它细绳。然后,您的 PHP 脚本会适当地设置 MIME 类型(在本例中为 text/plain,因为我们声称是一个 .txt 文件)并构建回复,就像我们在运行中构建一个 HTML 页面一样。

    【讨论】:

    • 这很完美!您能详细解释一下使用 URL 重写创建“虚拟文件”的含义吗?
    • 他的意思是你会使用类似window.location.href = "path/to/php/on/server.php?file=true"或类似的东西,如果查询变量file为真(或一些id,取决于什么),你会在你的php中返回文件你需要)。
    • Blindy,您的解决方案可以在某些情况下工作,但这不是我所说的虚拟文件,因为它向外界公开它实际上是由 PHP 生成的。我的解决方案隐藏了这一点,与您直接链接到的真实文本文件无法区分。当您需要以特定方式命名下载的文件时,这可能很重要,例如利用目标计算机上的文件关联。如果您将虚拟 PDF 发送到浏览器,您希望它在用户的 PDF 阅读器中打开。
    最近更新 更多