Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AJAX/jQuery异步下载文件_Javascript_Php_Jquery_Ajax - Fatal编程技术网

Javascript 使用AJAX/jQuery异步下载文件

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)) { //

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

在我的代码中,我在div上有一个ajax单击事件,它异步运行一个名为“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;
}
?>

代码在部分传输变量中正确工作(因为在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";