我在WordPress页面上有一个select元素,其中包含驻留在服务器上的几个.txt文件。当我从选择下拉列表中选择一个文件时,我希望将文件下载到浏览器,激活浏览器的保存对话框。
执行下载的一种方法是将文件放在单击的链接中,而不是选择下拉列表中的选项元素。我可以做类似的事情:
<a href="/directory/file1.txt download> file1.txt </a>
但是用户必须从一堆链接中进行选择,而不是从下拉列表中选择一个选项。而且我没有看到从下拉菜单中选择一个选项以执行上述链接的方法。
我还可以在jQuery中有一个更改处理程序,它感知下拉选择,然后通过jQuery ajax post调用将选择传递给PHP并在PHP中执行一些操作:
<?php
header("Content-Disposition: attachment");
header("Content-Type: text/plain");
readfile("/directory/file1.txt");
?>
但是如果我通过ajax调用到达PHP,我不确定
<?php
header("Content-Disposition: attachment");
header("Content-Type: text/plain");
readfile("/directory/file1.txt");
?>
将连接到浏览器,或者只是将数据传递回ajax调用。
有没有人看到从选择中触发下载的最佳方式?
由于
=====
答案 0 :(得分:1)
请注意,我没有测试所有设置,但我测试了使用top.location.href的建议解决方案,无需离开当前页面即可触发下载,并且可以正常运行。
好的,假设您使用的是jQuery,则需要三件事:
1-分发器脚本:
<?php
header("Content-Disposition: attachment");
header("Content-Type: text/plain");
readfile('/directory/'.$_GET['filename']);
?>
(这应该可以在网址http://www.yourdomain.com/get_feed.php
访问并获取参数filename
---如果你使用类似的东西,请添加支票和可能的白名单以确保脚本可以&#39;被滥用来访问您不想访问的服务器上的其他文件;直接使用参数的脚本非常不安全)
2-页面中的html选择下拉列表,其中包含您要覆盖的网址列表,例如:
<select id="the-dropdown">
<option value="">Choose a file...</option>
<option value="http://www.yourdomain.com/get_feed.php?filename=file1.txt">file1.txt</option>
<option value="http://www.yourdomain.com/get_feed.php?filename=file2.txt">file2.txt</option>
</select>
和3-一段js如:
(function($) {
$(document).ready(function() {
$('#the-dropdown').change(function() {
var that = $(this);
if (that.val() !== '') {
top.location.href = that.val();
}
});
});
})(jQuery);
就是这样。