Доступ к файлу ресурса запрещен из сервлета Java - PullRequest
1 голос
/ 09 августа 2009

Я пытаюсь получить доступ к файлу ресурса из сервлета, но получаю Ошибка HTTP 500 - доступ запрещен :

File file = new File("//warChildFolder//myFile.txt");
InputStream is = new FileInputStream(file); // <--error on this line

Я нахожусь на google-app-engine.

Любая помощь приветствуется!

Ответы [ 3 ]

3 голосов
/ 09 августа 2009

Документы Google App Engine говорят о "белом листинге" файла. Это в игре здесь?

Мне тоже интересно об этом:

File file = new File("//warChildFolder//myFile.txt");

Разве начальная косая черта не делает этот путь абсолютным?

Я бы попробовал это так:

File file = new File("WEB-INF/warChildFolder/myFile.txt");

Создайте путь относительно корня WAR и не забудьте указать WEB-INF.

3 голосов
/ 09 сентября 2009

Я не уверен насчет Google App Engine, но по моему опыту, единственное решение, которое работает в контейнерах и на разных платформах, - это использование ServletContext.getRealPath ().

new File(servletContext.getRealPath("/WEB-INF/warChildFolder/myFile.txt"));

В спецификации сказано: используйте косую черту и косую черту. Это дает вам независимость от платформы, и вы не полагаетесь на текущий каталог процесса.

1 голос
/ 09 августа 2009

Работает ли это, если вы используете разделители с одним путем?

(обновлено для использования относительных путей):

File file = new File("warChildFolder/myFile.txt");

Вам нужно экранировать символ "\" в строках, поэтому используйте "\", но все, что нужно, - это один "/".

Обновление: возможно, что обрабатываемый путь не совпадает с ожидаемым, вы можете попробовать записать абсолютный путь к файлу (с помощью file.getAbsolutePath ()), чтобы проверить это.

Еще одна вещь, которую нужно проверить, - это то, что у процесса есть права на чтение для папки / файла. Если вы не используете Windows, это может быть проблемой.

...