将服务器文件读取到浏览器保存对话框

时间:2016-05-19 05:25:11

标签: php wordpress

我在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调用。

有没有人看到从选择中触发下载的最佳方式?

由于

=====

1 个答案:

答案 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);

就是这样。