JavaScript: Еще один вариант загрузки файла по клику на кнопку
Общая идея следующая: по клику на кнопку вызываем AJAX запрос на сервер с определенными параметрами передаваемыми в POST, затем получив в результат запроса файл — формируем в DOM на файл в формате blob, и тут-же её нажимаем. В результате браузер показывает диалоговое окно сохранения файла.
Таким необычным способом мы убиваем несколько зайцев сразу:
- Получаем возможность показать ошибку, если вдруг файл на сервере сформировать не удалось. Это полезно если например файл формируется на сервере «на лету» — например файл XLSX с отчётом
- Мы можем передать серверу какие-то условия для формирования файла в POST запросе
- На странице мы не размещаем заранее данные в тегах <form></form>, как практикуется в подобных решениях
- Пользователю достаточно нажать на кнопку один раз для получения результата.
В результате скрипт формирования файла может выглядеть примерно следующим образом:
На клиенте:
На сервере: