0

我知道已经有很多关于使用 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

4 回答 4

3

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

于 2012-12-04T10:59:54.090 回答
1

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

您需要重定向主页或 iframe 以触发下载。

于 2012-12-04T11:00:54.217 回答
0
  1. 在ajax中返回文件名
  2. window.location.href = 'returned file name'和下载将开始!
于 2012-12-04T11:02:27.657 回答
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>'
于 2017-10-04T18:22:27.803 回答