Как установить путь к «контекстному пути» для загружаемых файлов с помощью Apache Common fileupload? - PullRequest
4 голосов
/ 25 мая 2010

Я использую общую библиотеку Apache для загрузки файлов с Netbeans 6.8 + Glassfish. Я пытаюсь изменить текущий путь загрузки, чтобы он соответствовал текущему контекстному пути сервлета, примерно так: WEB-INF / закачивать

поэтому я написал:

File uploadedFile = new File("WEB-INF/upload/"+fileName);
session.setAttribute("path",uploadedFile.getAbsolutePath());
item.write(uploadedFile);

но я заметил, что библиотека сохраняет загруженные файлы в папку glassfish , вот что я получаю, когда печатаю абсолютный путь к загруженному файлу:

C:\Program Files\sges-v3\glassfish\domains\domain1\WEB-INF\upload\xx.rar 

Мой вопрос:

  • Как заставить общую загрузку файла сохранить загруженный файл в пути относительно текущего пути сервлета, чтобы мне не нужно было указывать весь путь? это возможно?

1 Ответ

8 голосов
/ 25 мая 2010

java.io.File действует на файловую систему локального диска и абсолютно ничего не знает о контексте, в котором он запущен. Не следует ожидать, что он найдет «правильное» расположение, когда вы передаете относительный веб-путь * 1003. * in. Он станет относительным к текущему рабочему каталогу , который зависит от того, как вы запустили среду. Вы не хотите зависеть от этого.

Вы можете использовать ServletContext#getRealPath() для преобразования относительного веб-пути в абсолютный путь к файловой системе локального диска.

String relativeWebPath = "/WEB-INF/uploads";
String absoluteFilePath = getServletContext().getRealPath(relativeWebPath);
File uploadedFile = new File(absoluteFilePath, FilenameUtils.getName(item.getName()));
// ...

Тем не менее, я надеюсь, что вы знаете, что папка развертывания не подходит для загруженных файлов, которые должны быть сохранены навсегда. Все будет потеряно при повторном развертывании веб-приложения. См. Также Как записать файл в папку ресурса / изображения приложения?

...