Получение файла ресурсов в качестве InputStream в Playframework
Play.classloader.getResourceAsStream(filepath);
filepath - относительно чего? проект root? root? абсолютный путь?
Или, может быть, использование Play.classloader.getResourceAsStream неверно?
Ответ 1
В Play Framework каталог "conf" находится в пути к классам, поэтому вы можете поместить туда свой файл и открыть его с помощью getResourceAsStream.
Например, если вы создаете файл "conf/foo.txt", вы можете открыть его, используя
Play.classloader.getResourceAsStream("foo.txt");
Ответ 2
В качестве альтернативы использованию conf dir (который должен использоваться только для файлов, связанных с конфигурацией), вы можете использовать dir public и получить к нему доступ:
Принятый ответ устарел в Play 2.5.x, так как глобальный доступ к таким вещам, как загрузчик классов, постепенно прекращается. Рекомендуемым способом обработки этого движения является ввод play.api.Environment, а затем его classLoader, чтобы получить InputStream, например
class Controller @Inject()(env: Environment, ...){
def readFile = Action { req =>
...
//if the path is bad, this will return null, so best to wrap in an Option
val inputStream = Option(env.classLoader.getResourceAsStream(path))
...
}
}
Ответ 4
Относительно корня classpath. То есть, ваш WEB-INF/classes + все банки в WEB-INF/lib