Как мне инициировать PHP-скрипты, которые автоматически загружают zip-файл, используя jQuery - PullRequest
0 голосов
/ 28 апреля 2019

Я работаю над кодом для сжатия файлов с помощью PHP и загрузки zip. Как мне начать загрузку с помощью jQuery?

Когда я перезагружаю скрипт PHP через браузер, файл обычно скачивается в формате zip, но когда я отправляю запрос из jQuery, файл возвращается с сервера в виде бессмысленных символов, когда я визуализирую в консоли браузера. Пожалуйста, не могу автоматически загружать файл с помощью php, но проблема в том, когда я пытаюсь использовать jQuery для получения zip-файла

Код php в файле file.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-файл, но вместо этого в браузер отправляются бессмысленные символы

1 Ответ

0 голосов
/ 30 апреля 2019

Мне удалось решить проблему предоставленным решением. 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 не позволял мне отправлять параметры.

...