Javascript / jQuery: загрузка файла для загрузки

Есть ли способ узнать, что событие браузера относительно файла, готового к загрузке, запущено? У меня есть сценарий, который генерирует файл, и пока это происходит, я показываю goding. Как только появится это сообщение: http://img.ruphp.com/php/CmZHE.png (файл готов к загрузке, завершен скрипт) Я хотел бы остановить gif.

Можно ли это узнать с помощью JS? Использование ajax – это опция, но потребуется больше времени, поскольку для нее потребуется несколько изменений в системе.

Благодаря!

Я сделал это в следующем примере: http://geekswithblogs.net/GruffCode/archive/2010/10/28/detecting-the-file-download-dialog-in-the-browser.aspx

Для PHP обратите внимание, что так вы отправляете cookie:

 header('Content-type: application/octet-stream'); header('Set-Cookie: fileDownload=1; path=/'); header('Content-Disposition: attachment; filename='.$filename); 

Путь выше действительно важен. Затем JS также нужен путь для удаления cookie, например:

 $.removeCookie('fileDownload', { path: '/' }) 

У меня была такая же проблема, и я выбрал решение в два этапа.

Я думаю, что это хорошее решение для показа и скрытия сообщения spinner.gif и / или ожидания при подготовке файла, пока загрузка не будет готова.

  1. Сначала я модифицирую свой якорь с помощью jQuery, чтобы вызвать функцию загрузки ajax bby, добавив ?cmd=prepare на мой uri. Это подготовит мой PDF-файл на стороне сервера и сохранит его в доступной папке клиентом (например, domain.ext / documents / my_pdf_name.pdf).

HTML (bootstrap 3):

 <a href="/search/download" class="btn btn-primary pull-left download"> <i class="fa fa-file-pdf-o"></i> Download result in PDF </a> 

jQuery:

 $(function() { $('.download').on('click', function(e) { e.preventDefault(); $('.loading').show(); url = $('.download').attr('href') + '?cmd=prepare'; $.ajax({ url: url, type: 'get', success: function(filename) { console.log(data); window.location = filename; $('.loading').hide(); } }); }); }); 

Сторона сервера PHP:

 // ajax call if(addslashes($_GET["cmd"]) == "prepare") { echo create_pdf($_SESSION["search"], $out="prepare"); die(); } 
  1. Когда файл будет готов, функция create_pdf() вернет имя файла клиенту, а в моей функции успеха в ajax-запросе я вызову window.location = filename который покажет мне «сохранить как окно».

Подготовка документа на стороне сервера вызывается ajax, но загрузка – нет!

  1. Проблема, возникающая в результате этого решения, – это хранение файлов, которые вы не хотите хранить на сервере. Таким образом, вы можете удалять файлы старше х часов с помощью сценария bash. Например https://stackoverflow.com/a/249591/2282880