使用PHP / jQuery强制下载

时间:2012-12-04 10:55:37

标签: php jquery ajax download

我知道有很多关于强制下载PHP的问题,但是我无法找到我做错的事情,我应该怎么做。

我有一个包含文件名的列表,我想通过点击一个按钮下载其中一个。

我的jQuery:

$(".MappeDownload").on("click",function(e){
            e.stopPropagation();
            fileId=$(this).val()
            $.post("ajax/DownloadFile.php",{ id : fileId})
})

在服务器端,我有一个包含文件名和文件路径的表。

$sql = "SELECT vUploadPfad, vUploadOriginname  FROM tabUpload WHERE zUploadId='$_POST[id]'";
$result =  mysql_query($sql) or die("");
$file = mysql_fetch_array($result);
$localfile = $file["vUploadPfad"];
$name=$file["vUploadOriginname"];
$fp = fopen($localfile, 'rb');
        header("Cache-Control: ");   
        header("Pragma: ");         
        header("Content-Type: application/octet-stream");
        header("Content-Length: " . filesize($localfile));
        header("Content-Disposition: attachment; filename='".$name."';");
        header("Content-Transfer-Encoding: binary\n");
        fpassthru($fp);
        exit;

AJAX请求成功,我获得了正确的标题(文件大小,文件名等...),但下载没有开始。

4 个答案:

答案 0 :(得分:3)

您不需要ajax,只需重定向到强制下载的地址即可。页面不会改变,而不是$.post("ajax/DownloadFile.php",{ id : fileId})你应该有location.href = "ajax/DownloadFile.php?id="+fileId,并且在PHP文件中,将$ _POST转换为$ _GET

答案 1 :(得分:1)

对AJAX请求的响应永远不会触发下载。 AJAX请求在后台静默处理,它们永远不会直接触发可见活动。

您需要重定向主页面或iframe才能触发下载。

答案 2 :(得分:0)

  1. 在ajax中返回文件名
  2. 执行window.location.href = 'returned file name'并开始下载!

答案 3 :(得分:0)

有我的解决方案:

<script>
//downloading the file

 $(document).on('click', '.download_file', function(){
  var path = $(this).data("name");
  var action = "download_file"

    $.ajax({
        url: "action.php",
        method: "POST",
        data: {path:path, action:action},
        success: function(data)
        {
            window.location.href = path;
        }
      })
})
</script>

action.php

<button  type"button" name="download" data-name="'.$name.'" class="download_file btn btn-success btn-xs">Pobierz</button></td>'