Ответ 1
Метод getInputStream()
загруженного файла представляет собой содержимое файла.
InputStream input = uploadedFile.getInputStream();
Вам нужно скопировать его в файл. Сначала вы должны подготовить папку в локальной файловой системе на диске, где должны быть сохранены загруженные файлы. Например, /path/to/uploads
(в Windows это будет на том же диске, что и на сервере). Обратите внимание, что вы должны абсолютно не хранить файлы в расширенной папке WAR с использованием относительного пути или getRealPath()
по указанным здесь причинам Загруженное изображение доступно только после обновления страница.
Затем вам необходимо автогенерировать имя файла. В противном случае, когда кто-то другой загрузит файл по совпадению с тем же именем позже, он будет перезаписан. Вы можете использовать Files#createTempFile()
для получения имени с автогенерированным именем.
Path folder = Paths.get("/path/to/uploads");
String filename = FilenameUtils.getBaseName(uploadedFile.getName());
String extension = FilenameUtils.getExtension(uploadedFile.getName());
Path file = Files.createTempFile(folder, filename + "-", "." + extension);
Путь к загрузке при необходимости может быть параметризован на основе одного из нескольких способов, показанных в этом Q & A: Рекомендуемый способ сохранения загруженных файлов в приложении сервлета. FilenameUtils
является частью Apache Commons IO, который вы уже должны иметь в своем пути к классам, поскольку он зависит от компонента загрузки файла Tomahawk.
Наконец, просто поместите загруженный файл в этот файл (предположим, что Java 7):
try (InputStream input = uploadedFile.getInputStream()) {
Files.copy(input, file, StandardCopyOption.REPLACE_EXISTING);
}
System.out.println("Uploaded file successfully saved in " + file);
Затем, чтобы загрузить его обратно, проще всего зарегистрировать /path/to/uploads
в качестве нового контекста webapp или виртуального хоста, чтобы все эти файлы были доступны по URL-адресу. См. Также Загрузка изображений извне webapps/webcontext/deploy с помощью < h: graphicImage > или <img> тег.