Как работает страница загрузки SourceForge? - PullRequest
3 голосов
/ 08 февраля 2010

В ответах на другие вопросы было указано, что страница загрузки SourceForge работала путем добавления скрытого

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

Хорошо, точнее ... Правда, первоначальный "вопрос" был слишком расплывчатым.

Если перейти к http://sourceforge.net/projects/beankeeper/files/beankeeper/2.6.2/beankeeper-2.6.2.tar.gz/download, есть простая старая HTML-ссылка для загрузки рассматриваемого файла, но также есть автоматическая загрузка. Задержка, кажется, составляет около 2 с.

Кто-то спросил о моем конкретном случае использования. Я отвечу на это, зная, что это может отвлечь от ОП в определенной степени. Очень упрощенно:

  • более или менее традиционное приложение Java EE с двумя сервлетами
  • Сервлет-диспетчер, который действует как точка входа для контроллера пользовательского интерфейса
  • «Сервлет документа», который передает PDF в браузер, он делает это с помощью content-disposition = attachment, т. Е. Браузер показывает диалог сохранения или открытия
  • распечатанная страница с несколькими полями ввода и кнопкой отправки
  • при нажатии кнопки отправки
    • значения поля ввода должны быть обновлены в модели пользовательского интерфейса (и сеанс, где это необходимо) -> это то, что делает сервлет-диспетчер
    • должно быть инициировано создание PDF -> это то, что делает сервлет документа

Если я приму модель SF, отправка формы вызовет сервлет-диспетчер и перезагрузит текущую страницу (обычное поведение). После перезагрузки страницы я бы как-то - правильно, как SF это делает? - вызвать браузер для вызова документа сервлета.

Ответы [ 2 ]

8 голосов
/ 08 февраля 2010

Просто измените расположение окна во время загрузки страницы.

Вот SSCCE , просто скопируйте и вставьте его.

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2222034</title>
        <script>
            window.onload = function() {
                setTimeout(function() {
                    window.location = 'http://download.java.net/maven/1/jstl/jars/jstl-1.2.jar';
                }, 2000); // It's "cool" to let user wait 2 more seconds :/
            }
        </script>
    </head>
    <body>
        <p>The download of jstl-1.2.jar will start shortly...</p>
    </body>
</html>

Или, если вам нужно использовать POST, просто отправьте скрытую форму:

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2222034</title>
        <script>
            window.onload = function() {
                setTimeout(function() {
                    document.getElementById('downloadform').submit()
                }, 2000); // It's "cool" to let user wait 2 more seconds :/
            }
        </script>
    </head>
    <body>
        <p>The download of jstl-1.2.jar will start shortly...</p>
        <form id="downloadform" action="http://download.java.net/maven/1/jstl/jars/jstl-1.2.jar"></form>
    </body>
</html>
5 голосов
/ 08 февраля 2010

Это строго MHO, но лично я не нахожу ни страницы SourceForge, ни страницы загрузки CodePlex особенно элегантными. Взгляните на Google Code : нажатие на гиперссылку сразу же запускает загрузку, не требуя принятия какого-либо лицензионного соглашения, выбора зеркала загрузки или просмотра десятков баннеров. Он просто делает то, что должен: позволяет пользователям загружать любой интересующий их файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...