0

readfile();用来开始下载,它工作得很好,但是当尝试使用 JavaScript 检查用户是否可以下载文件时,它不会开始下载,而是显示文件的二进制代码。我希望它下载文件。

我用它来检查用户是否可以下载文件:

http.open("GET", "includes/checkdownload.php", true);

checkdownload.php我有这个

header('Cache-Control: public');
header('Content-Transfer-Encoding: binary');
header("Content-Type: application/pdf");
header('Content-Disposition: attachment; filename="file.pdf"');
ob_clean();
flush();
readfile("file.pdf"); 
4

2 回答 2

3

您不能通过 Ajax 请求开始下载。您可以使用 Ajax 请求检查文件的可用性(您可能应该对大文件使用 HEAD 以避免下载整个文件),但您需要使用它window.open来实际打开保存文件对话框。

window.open('includes/checkdownload.php');

或者,正如@Derek 指出的那样,您可以使用<iframe>,或者您可以通过设置重定向window.location.href,或者您也可以使用window.showModalDialog。任何会在浏览器中某处打开该 URL 的东西。

于 2012-06-21T19:22:17.913 回答
0

您将需要一个代理脚本来告诉您文件是否有效。因此,您无需对文件执行 http.open,而是在服务器上调用一个脚本,该脚本将返回一个断言是否可以下载该文件。

例如:

$.get('includes/candownload.php', function(data){ 
    if(data == 'ok'){
        window.location.href = "includes/checkdownload.php";
    }else{
        alert('Cannot download your file');
    }
)

在你的 php 文件“candownload.php”中

header('Cache-Control: public');
header('Content-Transfer-Encoding: binary');
header("Content-Type: text/plain");
ob_clean();
flush();
if(file_exists("file.pdf")){ echo 'ok'; }else{ echo 'no'; }
于 2012-06-21T19:22:46.213 回答