我使用ajax来调用download.php页面,但它无法正常工作。以下代码可能出现问题。
AJAX ::
$.ajax({
type: "POST",
url: 'downloadsample.php',
data: {
imagepath: "../ReportCard/imagepost.png"
},
success:function(data) {
alert('sample download done ');
}
});
PHP Code ::
<?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.');
}
}
?>
答案 0 :(得分:1)
你无法直接通过ajax下载文件。您可以将用户重定向到下载页面,也可以尝试使用iframe。我的意思是使用隐藏的iframe或动态生成iframe,并将此iframe的源代码放入您的下载URL。
答案 1 :(得分:0)
您无法通过Ajax执行此操作,因为JavaScript无法将文件直接保存到用户的计算机(出于安全考虑)。不幸的是,将主窗口的URL指向文件下载意味着您几乎无法控制文件下载时的用户体验。
尝试jQuery File Download,它允许使用OnSuccess和OnFailure回调完成文件下载的“类似Ajax”体验,以提供更好的用户体验。请查看blog post有关插件解决的常见问题以及使用它的一些方法以及demo of jQuery File Download的实际操作。这是source
这是一个使用带有promises的插件source的简单用例演示。该演示页面还包含许多其他“更好的用户体验”示例。
$.fileDownload('some/file.pdf')
.done(function () { alert('File download a success!'); })
.fail(function () { alert('File download failed!'); });