Как включить загрузку динамически генерируемых файлов из браузера? - PullRequest
2 голосов
/ 08 декабря 2011

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

Мое текущее решение состоит в том, чтобы позволить им отправить эту форму, а на стороне сервлета я изменяю заголовок ответа - расположение содержимого является вложением, а также предоставляю соответствующий тип mime.

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

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

Можете ли вы, ребята, предложить мне подход к этой проблеме?Должен ли я быть более конкретным в предоставлении информации?Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Если вы хотите сделать это синхронно (т. Е. Заставить пользователя ждать, пока документ будет готов, а не заставлять его уходить и делать другие вещи во время ожидания), традиционный подход - это перенести их на страницу «загрузки отчета».

Это будет страница, которая:

  • 1) информирует их о загрузке отчета.
  • 2) обновляет себя (используя метатег обновления или javascript)
  • 3) после обновления, проверяет, готов ли отчет и либо:
    • a)возвращается к шагу 1, если он не готов
    • b) дает им документ, если он готов.

Синхронный тип старой школы, но ваш вопрос звучал так, как будто вы выбрали именно этот подход.

Асинхронные подходы включают в себя:

  • Используйте Ajax, чтобы ссылка на документ появилась на странице, как только она будет готова,
  • Есть отдельная страница, которая показывает ранее сгенерированные документы.Пользователи могут переходить на эту страницу на досуге, а между тем они могут просматривать остальную часть сайта.Это требует ведения истории сгенерированных документов.
  • Как вы предложили, отправьте ее по электронной почте.
1 голос
/ 08 декабря 2011

Вы можете сделать асинхронный Ajax-вызов на сервер с данными формы вместо прямой отправки формы. На сервере вы создаете временный файл и возвращаете клиенту ссылку с загрузочным URL. После отправки ответа через Javascript вы можете показать пользователю подсказку, что ссылка для скачивания появится через минуту. Не забудьте очистить временный файл!

Для отправки Ajax Call я бы предложил использовать Javascript Framework. Посмотрите на JQuery:

http://api.jquery.com/category/ajax/

...