У меня есть галерея файлов в таблице с флажками для каждого файла.Цель состоит в том, чтобы проверить файлы, которые вы хотите загрузить, а затем нажать кнопку, чтобы загрузить ZIP-файл, содержащий эти отдельные файлы.
Кажется, все работает нормально ... массив, ajax, ответ "success" ... но файл не загружается.Возможно ли скачивать файлы таким способом?Если нет, что мне нужно сделать по-другому, чтобы это работало правильно?
jQuery
// searchIDs returns an array of file names. ie:
// 'file1.zip', 'file2.png', 'file3.pdf'
$('#toolkit-bin input[type=submit]').on('click', function(e) {
e.preventDefault();
$.ajax({
type : 'POST',
url : './functions.php',
data : { searchIDs: searchIDs },
success : function(data) {
alert(data);
},
error : function(request,error) {
alert("Request: "+JSON.stringify(request));
}
});
});
functions.php
// ROOT is defined as the root directory of the server.
$zipname = 'LiveLOUD-Toolkit.zip';
$zip = new ZipArchive();
$zip -> open($zipname, ZipArchive::CREATE | ZipArchive::OVERWRITE);
// Get the array of the selected files.
$files = $_POST['searchIDs'];
// Loop through the files.
foreach ($files as $file)
{
// Get the path to the file.
$path = ROOT.'/_assets/toolkit/'.$file;
// Add the file to the zip.
$zip -> addFromString(basename($path), file_get_contents($path));
}
// Zip archive will be created only after closing object.
$zip -> close();
// If the file was created successfully...
if (file_exists($zipname))
{
// Download the zip file.
// THIS STUFF DOES NOT SEEM TO WORK
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipname);
header('Content-Length: '.filesize($zipname));
// Delete the zip after download.
unlink($zipname);
// This is successfully returned.
echo 'Success!';
}
else
{
echo 'Error!';
}