Вопрос

Я пытаюсь получить доступ к файлу ресурсов из сервлета, но получаю Ошибка 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, это может быть проблемой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top