2009-08-09 8 views
1

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

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

Я на Google-приложение-двигатель.

Любая помощь оценена!

ответ

3

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

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

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

Не ведущий слэш сделать это абсолютный путь?

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

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

сделать путь относительно корня WAR и быть явным о WEB-INF.

+0

нет подсказки о том, как белый список файлов. в моем случае warChildFolder является дочерним элементом папки WAR (не в WEB-INF) – JohnIdol

+0

Я думаю, что белый список предназначен для классов, а не для файлов, есть ли у вас ссылка? –

+0

Yep - посмотрел, а документы говорят о белом листинге для классов без упоминания файлов? – JohnIdol

1

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

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

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

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

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

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

+0

Пробовал, но получал ту же ошибку – JohnIdol

+0

Спасибо за помощь. Я также получаю доступ отказался от fiel.getAbsolutePath() - я ожидал бы получить файл не найденной ошибки, если путь был неправильным – JohnIdol

+0

для меня это звучит как разрешения вопрос, тогда вы проверили их в моем последнем абзаце? –

3

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

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

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