Подтвердить что ты не робот

Получение файла ресурсов в качестве InputStream в Playframework

Play.classloader.getResourceAsStream(filepath); 

filepath - относительно чего? проект root? root? абсолютный путь?

Или, может быть, использование Play.classloader.getResourceAsStream неверно?

4b9b3361

Ответ 1

В Play Framework каталог "conf" находится в пути к классам, поэтому вы можете поместить туда свой файл и открыть его с помощью getResourceAsStream.

Например, если вы создаете файл "conf/foo.txt", вы можете открыть его, используя

Play.classloader.getResourceAsStream("foo.txt");

Ответ 2

В качестве альтернативы использованию conf dir (который должен использоваться только для файлов, связанных с конфигурацией), вы можете использовать dir public и получить к нему доступ:

 Play.classloader.getResourceAsStream("public/foo.txt")

Или в Scala с помощью:

 Play.resourceAsStream("public/foo.txt")

Ответ 3

Принятый ответ устарел в 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