使用PHP / jQuery强制下载
我知道有很多关于用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请求成功,我得到了正确的标题(文件大小,文件名等…),但下载没有启动。
您不需要ajax,只需重定向到强制下载的地址即可。 页面不会改变,而不是$.post("ajax/DownloadFile.php",{ id : fileId})
你应该有location.href = "ajax/DownloadFile.php?id="+fileId
,在你的PHP文件,将$ _POST转换为$ _GET
对AJAX请求的响应永远不会触发下载。 AJAX请求在后台静默处理,它们永远不会直接触发可见活动。
您需要重定向主页面或iframe才能触发下载。
- 在ajax中返回文件名
- 做
window.location.href = 'returned file name'
并开始下载!
有我的解决方案:
而action.php
'
- asp.net mvc文件上传ajaxpost
- ajax调用后打开一个特定的手风琴div
- 是否有可能在动态添加的文本输入上全局捕获keydown?
- Ajax调用没有调用服务器端,并且在httpxx中显示错误为“在ajax post调用中加载内容错误(NS_ERROR_DOCUMENT_NOT_CACHED)”
- FormData与.serialize(),有什么区别?
- 使用jquery将yii2 ajax请求中的两个参数传递给控制器
- 如何在PHP脚本中访问从jQuery.ajax()的HTML页面传递的表单数据的各个值?
- HTML格式的多个提交按钮
- 语法错误:jQuery $ .ajax调用中的字符无效在哪里?