Javascript 使用AJAX/jQuery异步下载文件
我想从服务器异步下载一个文件。 我的文件位于“文件”目录中-比网站内容高一个目录 在我的代码中,我在div上有一个ajax单击事件,它异步运行一个名为“get_file.php”的php文件,其中包含一些变量(get方法) 这是“get_file.php”的内容Javascript 使用AJAX/jQuery异步下载文件,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我想从服务器异步下载一个文件。 我的文件位于“文件”目录中-比网站内容高一个目录 在我的代码中,我在div上有一个ajax单击事件,它异步运行一个名为“get_file.php”的php文件,其中包含一些变量(get方法) 这是“get_file.php”的内容 <?php $dir = '../../files/'; $file = $_GET['file']; if (file_exists($dir . $file)) { //
<?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;
}
?>
代码在部分传输变量中正确工作(因为在testfile.txt中我可以找到路径和文件名),但下载不会启动。
怎么了?Ajax在这里帮不了你。相反,您可以通过设置不可见iFrame的src属性或导航到下载URL来触发下载 //iFrame方法
<iframe style="display:none" id="downloadFrame" src=""></iframe>
除此之外,您真的应该检查get_file.php中的输入。只要您不检查传入的文件名,用户就可以下载所有内容(../index.php)。get_file.php内容丢失。编辑文章以修复代码格式问题您不使用ajax,只需链接到文件,标题将使文件下载而不是重定向。当使用ajax时,没有发生任何事情,正如预期的那样。但我有两个问题:-我不想显示我的文件位置,-我的文件比www目录高一个目录重写规则也会这样做。但是,如果您想要PHP,请检查
<script>
var iframe = document.getElementById("downloadFrame");
iframe.src = "get_file.php?file=testfile.txt";
</script>
window.location.href = "get_file.php?file=testfile.txt";