php code to download file not working with ajax
本问题已经有最佳答案,请猛点这里访问。
我使用ajax调用download.php页面,但它无法正常工作。下面的代码可能会出现问题。
AJAX::
1 2 3 4 5 6 7 8 9 10 11 | $.ajax({ type:"POST", url: 'downloadsample.php', data: { imagepath:"../ReportCard/imagepost.png" }, success:function(data) { alert('sample download done '); } }); |
PHP代码::
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php if ( isset($_POST["imagepath"]) && !empty($_POST["imagepath"]) ) { $file = $_POST['imagepath']; // Fetch the file info. if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($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($file)); ob_clean(); flush(); readfile($file); exit; } else { die('The provided file path is not valid.'); } } ?> |
你不能直接通过ajax下载文件。您可以将用户重定向到下载页面,也可以尝试使用iframe。我的意思是使用隐藏的iframe或动态生成iframe您喜欢的内容并将此iframe的源代码放入您的下载URL。
你无法通过Ajax来实现,因为JavaScript无法将文件直接保存到用户的计算机上(出于安全考虑)。不幸的是,将主窗口的URL指向文件下载意味着您??几乎无法控制文件下载时的用户体验。
尝试jQuery文件下载,它允许使用OnSuccess和OnFailure回调完成文件下载的"类似Ajax"体验,以提供更好的用户体验。看一下博客文章,了解插件解决的常见问题以及使用它的一些方法,以及jQuery文件下载的演示。这是来源
这是一个使用带有promises的插件源的简单用例演示。该演示页面还包含许多其他"更好的用户体验"示例。
1 2 3 | $.fileDownload('some/file.pdf') .done(function () { alert('File download a success!'); }) .fail(function () { alert('File download failed!'); }); |