您好我试图强制下载从ZipArchive()
创建的zip文件,但该文件未被下载而是在浏览器中显示/读取。请检查下面的代码。
function search(item){
var search = new XMLHttpRequest();
search.open("POST","download.php");
search.onreadystatechange = function(){
if(search.readyState === 4 && search.status === 200){
// document.getElementById('tes').innerHTML = search.responseText;
}
}
search.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
search.send("searchItem="+item);
}
下载按钮,调用搜索功能。
<button value="<?php echo "$name"; ?>" onclick="search(this.value)">Download File</button>
download.php文件中的PHP代码
<?php
$name = trim($_POST['searchItem']);
if(!file_exists("images/$name/$name.zip")){
//creating a zip file
$zip = new ZipArchive();
$zip_file = "$name".'.zip';
$zip->open("images/$name/".$zip_file, ZipArchive::CREATE);
$files = scandir("images/$name/");
for ($i=2; $i < count($files) ; $i++) {
$fi = $files[$i];
if(file_exists("images/$name/$fi")){
$zip->addFile("images/$name/$fi", $fi);
}
}
$zip->close();
//force to download the zip
$file = "images/$name/$zip_file";
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
readfile($file);
// remove zip file from temp path
unlink($file);
}
?>
答案 0 :(得分:1)
以下是我用来获取zip文件的内容
header('Content-Type: application/zip'); // ZIP file
header('Content-Disposition: attachment; filename="downloadpackage.zip"');
header('Content-Transfer-Encoding: binary');
header('Pragma: public');
header('Content-Description: File Transfer');
echo($file);
希望有所帮助
答案 1 :(得分:0)
您无法使用javascript / ajax下载文件。你使这种方式变得比它需要的更困难。忘记AJAX,只需创建一个表单或锚标记,链接到生成ZIP文件的脚本。您的页面不会被重定向,因此没有理由进行XHR。
出于安全原因,Javascript无法访问您的文件系统,因此您无法使用它来下载文件。如果您访问的每个网站都能够将文件添加到您的计算机,该怎么办?那太糟糕了。这就是为什么你不能。
答案 2 :(得分:0)
由于您无法使用AJAX
下载文件,因此最简单的解决方案是将文件名返回给Javascript并使用location.href并强制下载文件。
<?php
$name = trim($_POST['searchItem']);
if (!file_exists("images/$name/$name.zip")) {
//creating a zip file
$zip = new ZipArchive();
$zip_file = "$name" . '.zip';
$zip->open("images/$name/" . $zip_file, ZipArchive::CREATE);
$files = scandir("images/$name/");
for ($i = 2; $i < count($files); $i++) {
$fi = $files[$i];
if (file_exists("images/$name/$fi")) {
$zip->addFile("images/$name/$fi", $fi);
}
}
$zip->close();
//force to download the zip
$file = "images/$name/$zip_file";
echo json_encode(['filename' => $file]); // return file name to Javascript
}
?>
然后在Javascript中我使用location.href
来强制下载文件
function search(item){
var search = new XMLHttpRequest();
search.open("POST","check.php");
search.onreadystatechange = function(){
if(search.readyState === 4 && search.status === 200){
var data = JSON.parse(search.responseText);
window.location.href = data.filename; // force file download
}
};
search.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
search.send("searchItem="+item);
}