Скачивание файлов из апплета - PullRequest
2 голосов
/ 13 мая 2011

У меня есть приложение Java Applet. Вариант использования выглядит следующим образом:

Пользователи вызывают URL-адрес, сопоставленный с сервлетом. В качестве ответа сервлет возвращает страницу JSP, с которой пользователи могут перемещаться в пользовательском интерфейсе. Весь пользовательский интерфейс сделан из Swing [в основном, JApplet]. События в пользовательском интерфейсе обрабатываются традиционным способом [ActionListener s, SelectionListener s ...]. Теперь у меня есть следующее требование:

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

Можно ли это сделать с учетом функций безопасности JApplets? Также рассмотрим механизм обработки событий компонентов Swing.

1 Ответ

4 голосов
/ 13 мая 2011

Опции для апплета в песочнице.

Есть 2 (.2) пути (о которых я могу сразу подумать).

  1. Использование AppletContext.showDocument (URL, String) метод для запуска загрузки с использованием браузера.
  2. Для апплетов 'Next Generation' на основе 2 (1.6.0_10 + в Sun / Oracle JVM) этоможно подключиться к функциональности JNLP API Java Web Start .
    1. JNLP API предоставляет возможность доступа к локальной файловой системе в изолированном приложении или апплете.Вот моя маленькая демонстрация.файловых служб API JNLP .
    2. API JNLP также предоставляет метод BasicService.showDocument (URL) .Эта версия немного превосходит эквивалент AppletContext в том, что она возвращает boolean для указания успеха / неудачи.Версия на основе апплета может завершиться сбоем, и если это произойдет, она делает это тихо.Смотрите также демо.BasicService .

Доверенный апплет может использовать этот процесс.

  1. Нажмите JFileChooser, чтобы разрешитьПользователь сам решает, где сохранить File.
  2. Если селектор возвращает допустимое значение File (что указывает на то, что действие не было отменено), приступайте к сохранению.
  3. Получите InputStream изURL.
  4. Установить OutputStream в File.
  5. Считать байты из InputStream, записать их в OutputStream.
  6. Промыть и повторять до тех пор, пока не будет прочитано -1.
...