我想从服务器异步下载文件。 我的文件位于'文件中。 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中我可以找到路径和文件名),但下载并没有开始。 有什么问题?
答案 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)。