Вот что я бы сделал.
1.Создание действия prepare_file
Во-первых, я бы создал действие, задачей которого было бы просто создать файл, и вместо рендеринга HTML он отображал бы объект JSON с именем созданного файла..
2.Используйте AJAX для вызова действия prepare_file
На клиенте, когда пользователь нажимает кнопку для загрузки файла, вы отображаете сообщение «Подготовка к загрузке ...» и просто делаете запрос AJAX для этого действия.,Ответ, который вы получите через AJAX - это имя созданного файла.
3.Перенаправление на загрузку файла
Наконец, вы можете скрыть готовящееся сообщение о загрузке и перенаправить браузер на загрузку файла через JavaScript с именем созданного файла.В этом действии вы использовали бы send_file
.
Я знаю, что в этом вопросе вы также хотели иметь возможность отображать пользователю сообщение при загрузке файла и другое сообщение, когда он закончен.Однако это невозможно, если вы не напишите свой собственный менеджер загрузок на стороне клиента.Браузер полностью обрабатывает загрузку файлов, и пользователь увидит в браузере, что файл загружается и каков прогресс.Итак, я понимаю, откуда вы, но вы не должны чувствовать, что пользователь не проинформирован о том, что происходит.
По крайней мере, с этим решением вы отображаете сообщение, когдафайл готовится, а затем, как только это сообщение исчезнет, они получат диалоговое окно загрузки файла из браузера.
Если вам нужна помощь с реальными примерами кода, как это сделать, дайте мне знать.