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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何启动使用jQuery自动下载zip文件的PHP脚本相关的知识,希望对你有一定的参考价值。

我正在研究使用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文件,而是将乱码字符发送到浏览器

答案

我设法通过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不允许我发送参数。

以上是关于如何启动使用jQuery自动下载zip文件的PHP脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何在前端使用 Angular 从 PHP Laravel API 下载 zip 文件?

如何使用标头php下载zip文件而不将其保存在服务器上

使用 php 将多个文件下载为 zip 文件

如何使用 Azure 自动化运行手册将 Azure devops 存储库下载为 zip 文件?

如何使用 php 读取 zip 文件的创建日期

PHP 即时创建和下载 ZIP