Автоматический запуск загрузки файла после отправки формы


У меня есть веб-форма, которую пользователи заполняют онлайн. Когда они нажмут "Отправить", для них начнется загрузка файла.

На данный момент я обрабатываю отправку формы и создаю подходящий файл для пользователя и запускаю его с подходящими заголовками. например...

header('Content-type: "application/octet-stream"');
header('Content-Disposition: attachment; filename="yourfile.txt"');
header("Content-Transfer-Encoding: binary");

Однако, поскольку загрузка начинается сразу, браузер оставляет исходную форму на экране.

Я бы очень хотел перейти к экрану "Спасибо" после завершения загрузки (или до начнется загрузка). Я знаю, что это возможно, потому что почти каждый сайт загрузки, который вы посещаете, делает это (обычно для того, чтобы накачать вас рекламой до начала загрузки).

Итак, как мне показать экран "Спасибо", который начнет загрузку через секунду?

Как любое предлагаемое решение повлияет на поведение кнопки "Назад", так как я не хочу, чтобы файл загружался снова без заполнения формы?

Я использую PHP на сервере и могу полагаться на Javascript (и jQuery) быть доступным на клиенте.

Спасибо.

Author: Rik Heywood, 2009-10-02

3 answers

Вы можете отправить форму в Спасибо документ и поместить туда МЕТА-обновление для загрузки файла:

<meta http-equiv="refresh" content="3;url=download.php">
<p>Thank you! The download will start in 3 seconds. If not, use this link to download the <a href="download.php">file</a></p>
 23
Author: Gumbo, 2009-10-02 12:13:40

Добавьте вторую страницу с надписью "спасибо, ваша загрузка начнется через несколько секунд" и запустите загрузку с помощью javascript:

$(document).ready(function(){
  window.setTimeout(function(){
    window.location = 'http://yourdownloadhost.com/file.zip';
  }, 1500);
});

Или используйте мета-перенаправление.

 3
Author: middus, 2009-10-02 12:14:45

Вы можете вставить скрытый iframe на свою страницу и отправить свою форму в этот iframe.

 0
Author: , 2009-10-02 14:07:25