Доступ запрещен к файлу ресурсов из Java-сервлета
-
12-09-2019 - |
Вопрос
Я пытаюсь получить доступ к файлу ресурсов из сервлета, но получаю Ошибка HTTP 500 – доступ запрещен:
File file = new File("//warChildFolder//myFile.txt");
InputStream is = new FileInputStream(file); // <--error on this line
Я нахожусь на Google-App-Engine.
Любая помощь приветствуется!
Решение
В документации Google App Engine говорится о «белом списке» файла.Это здесь в игре?
Меня тоже интересует вот это:
File file = new File("//warChildFolder//myFile.txt");
Разве косая черта не делает этот путь абсолютным?
Я бы попробовал так:
File file = new File("WEB-INF/warChildFolder/myFile.txt");
Укажите путь относительно корня WAR и явно укажите WEB-INF.
Другие советы
Я не уверен насчет Google App Engine, но, по моему опыту, единственное решение, которое работает на разных контейнерах и платформах, — это использовать ServletContext.getRealPath().
new File(servletContext.getRealPath("/WEB-INF/warChildFolder/myFile.txt"));
В спецификации сказано:используйте косую черту и ведущую косую черту.Это дает вам независимость от платформы, и вы не полагаетесь на текущий каталог процесса.
Работает ли это, если вы используете разделители одного пути?
(обновлено для использования относительных путей):
File file = new File("warChildFolder/myFile.txt");
Вам нужно экранировать символ "\" в строках, поэтому используйте "\", но достаточно одного "/".
Обновлять:Возможно, обрабатываемый путь не совпадает с ожидаемым. Чтобы проверить это, вы можете попробовать записать абсолютный путь к файлу (с помощью file.getAbsolutePath()).
Еще одна вещь, которую следует проверить, — это наличие у процесса разрешений на чтение папки/файла.Если вы не используете Windows, это может быть проблемой.