@Xander11rgn

Как скачать файл с сервера?

Здравствуйте, подскажите, как скачать файл с сервера? Перепробовал всевозможные инструкции, ничего не работает.
Скачиваемый файл - это вордовский файлик, сгенерированный с помощью PHPWord. Там тоже имеется возможность сразу послать файл на скачку, написав:
$word->save("php://output");
Но это не выводит никакого диалогового окна для скачки файла, а просто как будто бы считывает весь файл и возвращает в ответе клиенту. Приняв этот ответ, вывожу в консоли:
5ef1db1b960ee198559525.png
Затем пытался с помощью установки заголовков:
if (file_exists($filename)) {
    if (ob_get_level()) {
      ob_end_clean();
    }
    header('Content-Description: File Transfer');
    header('Content-Type: application/msword');
    header('Content-Disposition: attachment; filename=' . $filename);
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filename));
    readfile($filename);
    exit;
  }

Readfile делает опять то же самое - считывает и посылает в response клиенту. В консоли та же ситуация.
То есть я вижу, что файл вроде бы как-то считывается, но он не скачивается на компьютер пользователя. Я полагаю, должна ведь пойти привычная нам всем загрузка файла, ну либо открытие диалогового окна, у кого как. Но ничего вообще не происходит.
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
да, а что в этом случае тогда?
а в этом случае во первых браузер вполне естественно будет класть болт на ваши заголовки, ибо контент уже загружен, а во вторых все это примет объект аякса, а не документ, и если вам так принципиально сделать это именно аяксом, то надо писать на жс обработчик принятого контента и из него лепить уже блоб, и потом файл сохранять только. Тупо, муторно, жрет процессор и память. Достаточно было бы сделать линк с нужными параметрами и отправлять на сервер запрос гет, точно так же как вы делаете это аяксом, только без аякса, и все будет работать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы