使用AJAX / jQuery异步下载文件

时间:2014-03-30 11:10:21

标签: javascript php jquery ajax

我想从服务器异步下载文件。 我的文件位于'文件中。 directory - 比网站内容高一个目录。

在我的代码中,我在div上有一个ajax click事件,异步运行一个名为' get_file.php'的php文件。用一些变量(GET方法)。

这是' get_file.php'

的内容
<?php

$dir    =   '../../files/'; 
$file   =   $_GET['file'];  

if (file_exists($dir . $file)) {

            // only for test run a file via ajax
            file_put_contents("test.tht", $dir . $file);

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($dir . $file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($dir . $file));
    ob_clean();
    flush();
    readfile($dir . $file);
    exit;
}
?>

代码在传输变量的一部分中工作(因为在测试文件.txt中我可以找到路径和文件名),但下载并没有开始。 有什么问题?

1 个答案:

答案 0 :(得分:2)

Ajax在这里不会帮到你。相反,您可以通过设置不可见iFrame的src属性或导航到下载URL来触发下载。

// iFrame方法

<iframe  style="display:none" id="downloadFrame" src=""></iframe>

-

<script>
  var iframe = document.getElementById("downloadFrame");
  iframe.src = "get_file.php?file=testfile.txt";
</script>

//或导航到下载网址

window.location.href = "get_file.php?file=testfile.txt";

除此之外,您确实应该检查get_file.php中的输入。只要您不检查传入的文件名,用户就可以下载所有内容(../index.php)。