Получить полный путь к выбранному файлу в JSF
Мне нужна кнопка JSF, которая позволяет пользователю просматривать и выбирать определенный файл, а затем мне нужна моя программа, чтобы получить полный путь к файлу.
Эта функциональность требуется, когда пользователь запускает клиентскую часть с самого сервера (т. Е. Просматривает файл на том же сервере, на котором размещено веб-приложение). Если пользователь отправляет запрос с другого компьютера, то загрузки файла достаточно.
Сейчас я использую тег h:inputFile.
<h:inputFile id="file" value="#{TrainingDirectoryBean.file}"></h:inputFile>
Мой бин: TrainingDirectoryBean имеет следующее свойство
protected Part file;
Но я не могу получить полный путь от этого. Каково решение?
1 ответ
JSF <h:inputFile>
компонент генерирует HTML <input type="file">
элемент, который официально может отправлять только содержимое файла вместе с единственным именем файла - хотя некоторые браузеры, особенно тот, который был разработан какой-то командой в Редмонде, также отправляют полный путь к файлу вместе с именем файла из-за ошибки безопасности; на который, следовательно, не следует полагаться, так как это может быть исправлено и удалено в будущих версиях.
В терминах HTML не существует какого-либо элемента, который позволял бы конечному пользователю выбрать полный путь к файлу из своей файловой системы на локальном диске и отправить его полностью (без связанного содержимого файла) на сервер. Поскольку JSF в контексте этого вопроса является просто производителем HTML-кода, в JSF это также невозможно.
Подумайте о создании апплета на основе Swing, который, в свою очередь, вы встраиваете обычным способом в свою HTML-страницу (или JSF-страницу, в зависимости от того, как вы интерпретируете вещи). Качели JFileChooser
может выбрать локальную дисковую файловую систему и получить полный путь. Вы можете в свою очередь отправить эту информацию через URLConnection
на сервер (не забудьте подписать апплет, чтобы не беспокоить и не беспокоить конечного пользователя о предупреждениях безопасности, которые он может выдавать).