如何启动使用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 文件?