Как загрузить файл с помощью JSF 2.2 ? Где сохраненный файл?

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

Мой единственный вопрос: как я могу указать местоположение, где файлы будут сохранены на сервере? Я хотел бы получить их как java.io.File экземпляры. Это должно быть реализовано в бэкбоне, но я не понимаю, как это сделать.

JSF не сохранит файл в любом предопределенном месте. Это будет просто предлагать вам загруженный файл в качестве примера javax.servlet.http.Part который находится за кулисами, временно хранящиеся в памяти сервера и / или временном хранилище на диске, о которых вы не должны беспокоиться.

Чтобы сохранить его в нужном месте, вам нужно получить контент по Part#getInputStream() а затем скопировать его в Path представляющий местоположение. Вы можете сделать это в методе (ajax) action (listenener) обычным способом. Вот пример, который делает это с помощью прослушивателя ajax во время события change HTML DOM:

      
 private Part file; // +getter+setter public void save() { try (InputStream input = file.getInputStream()) { Files.copy(input, new File(uploads, filename).toPath()); } catch (IOException e) { // Show faces message? } } 

Папка uploads и filename полностью находятся под вашим контролем. Например, "/path/to/uploads" и Part#getSubmittedFileName() соответственно. Имейте в виду, что любой существующий файл будет перезаписан, вы можете использовать File#createTempFile() для автоматического создания имени файла.

Не используйте Part#write() как может предложить некоторый аргумент. Он будет в основном переименовывать файл во временном хранилище, как определено @MultipartConfig(location) . Также не используйте ExternalContext#getRealPath() , чтобы сохранить загруженный файл в папке развертывания. Файл будет потерян, когда WAR перераспределяется по той простой причине, что файл не содержится в исходной WAR. Всегда сохраняйте его на абсолютном пути вне папки развертывания.

Для демонстрации в реальном времени проверьте последний элемент демонстрации на витрине OmniFaces .

Смотрите также:

  • Запись файла на диск с использованием JSF 2.2 inputFile
  • Как сохранить загруженный файл в JSF
  • Рекомендуемый способ сохранения загруженных файлов в приложении сервлета
  • Загрузка файла вместе с другим объектом на веб-сервисе в Джерси.
  • Каков пограничный параметр в HTTP-многочастном (POST) запросе?
  • Давайте будем гением компьютера.