【发布时间】:2023-05-18 03:21:02
【问题描述】:
当用户单击 url 时,我打开了一个对话框。在该对话框中,我有两个按钮,“确定”(关闭对话框)和“下载文件”(我希望在单击时下载我刚刚通过 PHP 创建的文件)。如何使用“下载文件”按钮实现该功能?
我尝试了 $.get 但它只检索文件的数据,并没有提示用户下载文件。
谢谢。
【问题讨论】:
当用户单击 url 时,我打开了一个对话框。在该对话框中,我有两个按钮,“确定”(关闭对话框)和“下载文件”(我希望在单击时下载我刚刚通过 PHP 创建的文件)。如何使用“下载文件”按钮实现该功能?
我尝试了 $.get 但它只检索文件的数据,并没有提示用户下载文件。
谢谢。
【问题讨论】:
在该按钮的点击处理程序中:
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 页面一样。
【讨论】:
window.location.href = "path/to/php/on/server.php?file=true"或类似的东西,如果查询变量file为真(或一些id,取决于什么),你会在你的php中返回文件你需要)。