如何启动使用jQuery自动下载zip文件的PHP脚本

问题描述 投票:-1回答:1

我正在研究使用PHP压缩文件的代码并下载zip,如何使用jQuery启动下载?

当我通过浏览器重新加载PHP脚本时,文件通常以zip格式下载,但是当我从jQuery发送请求时,当我在浏览器控制台中进行可视化时,该文件将作为乱码字符从服务器返回。请不要我可以使用php自动下载文件,但问题是当我尝试使用jQuery获取zip文件时

文件file.php中的php代码

$file_path = '/path/tofile/file.php'
$file_name  = basename($file_path);
header('Content-Type: application/zip');
header("Content-Transfer-Encoding: Binary");
header('Content-Disposition: attachment; filename="'.$file_name.'"');
header("Content-Length: ".filesize($file_path));

flush();
readfile($file_path);

相应的ajax请求

$.get('file.php',  function(data)
{
}
);

我希望该文件可以从jQuery下载为普通的zip文件,而是将乱码字符发送到浏览器

javascript php jquery zip
1个回答
0
投票

我设法通过https://stackoverflow.com/a/42830315/6245812提供的解决方案来解决问题

let urlToSend = "file.php";
let req = new XMLHttpRequest();
let formdata = new FormData();
formdata.append("user", "joe");
formdata.append("id", "10");

req.addEventListener("load", function (event) {
   console.log(req.response);
   let blob = req.response;
   let fileName = req.getResponseHeader("fileName"); //if you have the fileName header available
   let link=document.createElement('a');
   link.href=window.URL.createObjectURL(blob);
   link.download=fileName;
   link.click();
}, false);

req.open("POST", urlToSend, true);
req.responseType = "blob";
req.send(formdata);

我只是将请求类型从GET更改为POST,因为GET不允许我发送参数。

© www.soinside.com 2019 - 2024. All rights reserved.