Определить, когда браузер получает файл загрузки

У меня есть страница, которая позволяет пользователю загружать динамически генерируемый файл. Генерирование занимает много времени, поэтому я хотел бы показать "ожидание" индикатор. Проблема в том, что я не могу понять, как определить, когда браузер получил файл, поэтому я могу скрыть индикатор.

Я делаю запрос в скрытой форме, которая отправляет на сервер и нацеливает скрытый iframe для его результатов. Поэтому я не заменяю все окно браузера результатом. Я слушаю "загрузить" событие в iframe, в надежде, что оно сработает после завершения загрузки.

Я возвращаю & quot; Content-Disposition: attachment & quot; заголовок с файлом, который заставляет браузер показывать & quot; Сохранить & quot; Диалог. Но браузер не запускает «загрузить» событие в iframe.

Один из подходов, которые я попробовал, - это использование ответа из нескольких частей Таким образом, он отправит пустой HTML-файл, а также прикрепленный загружаемый файл. Например:

Content-type: multipart/x-mixed-replace;boundary="abcde"

--abcde
Content-type: text/html

--abcde
Content-type: application/vnd.fdf
Content-Disposition: attachment; filename=foo.fdf

file-content
--abcde

Это работает в Firefox; он получает пустой HTML-файл, запускает «загрузить» событие, а затем показывает & quot; Сохранить & quot; диалог для загружаемого файла. Но это не сработает в IE и Safari; IE запускает «загрузить» событие, но не загружает файл, и Safari загружает файл (с неверным именем и типом содержимого) и не запускает «загрузить» событие.

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

У кого-нибудь есть идея получше?

Ответы на вопрос(17)

Ваш ответ на вопрос