我知道有很多关于强制下载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请求成功,我获得了正确的标题(文件大小,文件名等...),但下载没有开始。
答案 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)
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>'